Добавить json данные объекта в таблицы вместе с заголовками - PullRequest
1 голос
/ 08 апреля 2020

У меня есть несколько json файлов, которые я пытаюсь загрузить в таблицы внутри нескольких div.

Вот мой формат json:

json1:

[
    {
        "id": 12345,
        "code": "final",
        "error": "",
        "data": [
            {
                "metric": 4940616.0,
                "title": "display"
            },
            {
                "metric": 5132162.0,
                "title": "platform"
            },
            {
                "metric": 4954576.0,
                "title": "subscribers"
            },
            {
                "metric": 4882217.0,
                "title": "unique_visitors"
            }
}

json2

[
    {
        "run_id": 098765,
        "code_title": "random",
        "error": "",
        "data": [
            {
                "col1": "abc",
                "avg": 1,
                "mean": 0,
                "median": 3
            },
            {
                "col1": "abc",
                "avg": 1,
                "mean": 2,
                "median": 6
            },
            {
                "col1": "abc",
                "avg": 1,
                "mean": 1,
                "median": 6
            }
        ]
    }
]

JavaScript / jQuery Код:

const fn2 = (th, td) => {
  $.getJSON(api, function(elem) {
    elem.forEach(d => {     
        heads = Object.keys(d.data[0]);
        col = Object.values(d.data);
          heads.forEach(headers => {
            $(th).append(`<th>${headers}</th>`);
          });
          col.forEach(cols => {
            $(td).append(`<tr><td>${cols}</td></tr>`);
          });
    });
  });
}

const fn = () => {
      $('#d').append(`
              <table border=1>
              <thead>
              <tr id='add_th_${codes}'>
              </tr>
              </thead>
              <tbody id='td_${codes}'>
              </tbody>
            </table>
      `);
      fn2(`#add_th_${codes}`, `#td_${codes}`);
}

Я могу загрузить заголовки в несколько таблиц, но не могу добавить в них данные. Есть способ сделать это? Что я делаю не так?

Вот так выглядит моя текущая таблица для json1:

json1

Как мне заполнить таблицу ? Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

cols имеет формат, подобный {"metric": 4940616.0, "title": "display"}, поэтому вам нужно выполнить итерацию по нему, чтобы собрать элементы <td>:

const fn2 = (th, td) => {
  heads = Object.keys(d.data[0]);
  col = Object.values(d.data);
  for (var header of heads) {
    $(th).append(`<th>${header}</th>`);
  }
  for (var cols of col) {
    $(td).append(`<tr>`);
    for (var val of Object.values(cols)) {
      $(td).append(`<td>${val}</td>`);
    }
    $(td).append(`</tr>`);
  }
}

var d = {"id": 12345, "code": "final", "error": "", "data": [
  {"metric": 4940616.0, "title": "display"}, 
  {"metric": 5132162.0, "title": "platform"}, 
  {"metric": 4954576.0, "title": "subscribers"},
  {"metric": 4882217.0, "title": "unique_visitors"}
]};

var codes = 1;
$('#d').append(`<table border=1><thead>
  <tr id='add_th_${codes}'></tr></thead>
  <tbody id='td_${codes}'></tbody></table>`);
fn2(`#add_th_${codes}`, `#td_${codes}`);
td, th { background: #333; color: white; padding: 1px 4px; font-size :13px; font-family: segoe ui; border: none; } thead, table { border: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="d"></div>
0 голосов
/ 08 апреля 2020

Ваш cols в forEach снова является объектом . Установка значения l oop на его значения должна исправить проблему:

const fn2 = (th, td) => {
  $.getJSON(api, function(elem) {
    elem.forEach(d => {     
        heads = Object.keys(d.data[0]);
        col = Object.values(d.data);
          heads.forEach(headers => {
            $(th).append(`<th>${headers}</th>`);
          });
          let colCells = '';
          col.forEach(cols => {
            Object.values(cols).forEach(c => {
              colCells += `<td>${c}</td>`;
          });
          $(td).append(`<tr>${colCells}</tr>`);
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...