Неправильно отображаются данные из массива в JSON файле, при генерации таблицы

Получаю от сервера JSON файл, внутри него ещё один массив данных [products].

Пример из свагера:

[
  {
    "day": 0,
    "nameOfMeal": "string",
    "products": [
      {
        "name": "string",
        "calories_per_100g": 0,
        "daily_norm_per_person": 0,
        "proteins": 0,
        "fats": 0,
        "carbohydrates": 0
      }
    ]
  }
]

Далее, у меня проходит цикл, который генерирует таблицу и заголовки для каждого значения, но когда цикл заполяет строку products из JSON файла, то объекты из неё отображаются как [object Object].

По разному бился над это проблемой, но решить так и не смог(

Вот код создания таблицы и скрины результата работы цикла:

        async function getRation() {

            let DataRation = await fetch('http://localhost:8080/getRation',{
                method:'GET'
            });

            let data = await DataRation.json();
            console.log(data)


            var head = $("<tr />")
            $("#DataTable").append(head);
            for (var j = 0; j < Object.keys(data[0]).length; j++) {
                head.append($("<th>" + Object.keys(data[0])[j] + "</th>"));
            }
            for (var i = 0; i < data.length; i++) {
                drawRow(data[i]);
            }


            function drawRow(data) {
                var row = $("<tr />")
                $("#DataTable").append(row);
                row.append($("<td>" + data["day"] + "</td>"));
                row.append($("<td>" + data["nameOfMeal"] + "</td>"));
                row.append($("<td>" + data["products"]+ "</td>"));
            }
        }

        setTimeout(getRation, 300);

введите сюда описание изображения


Ответы (1 шт):

Автор решения: SwaD

Предположим, что вам надо вывести из массива, только название продуктов, тогда надо

  • Преобразовать каждый элемент массива в строку - .map()
  • Преобразовать весь массив в строку с разделителем ', ' - .join()

и уже строку добавлять в поле таблицы

row.append($("<td>" + data["products"].map(it => it.name).join(', ')+ "</td>"))

Если вывод более сложный, то метод в методе map() можно сделать нужные преобразования для дальнейшего вывода.

row.append($("<td>" + data["products"].map(it => `${it.name}(${it.calories_per_100g} ккал на 100г) `).join(', ')+ "</td>"))

Еще вариант, для каждого элемента основного массива, отдельно преобразовывать элементы массива products и отдельно добавлять в ячейку таблицы

→ Ссылка