JSON для нескольких таблиц HTML

#javascript #jquery #html #json

#javascript #jquery #HTML #json

Вопрос:

Я хочу создать HTML-таблицу из файла JSON. Это минус первое (заголовок) целое. Это необходимо добавить в качестве заголовка над таблицей.

Я посмотрел на другой код, но он преобразует весь файл JSON в таблицу, а не извлекает такие данные, как заголовок и остальные данные, в таблицу.

Я пробовал это с https://github.com/omkarkhair/jsonTable

Json Souce

 [{
    "title": "info",
    "detail": {
        "total": "12",
        "new": "1",
        "handling": "0",
        "inactive": "0",
        "closed": "11"
    }
}, {
    "title": "other info",
    "detail": {
        "total": "5",
        "new": "1",
        "handling": "1",
        "inactive": "0",
        "closed": "3"
    }
}]
 

Желаемый результат: http://jsfiddle.net/zwn9cd6f /

Мой код javascript до сих пор, но это даже не заполнит таблицу…

 <script type="text/javascript">

    var json_source = [{ "title": "info", "detail": { "total": "12", "new": "1", "handling": "0", "inactive": "0", "closed": "11" }}, { "title": "other info", "detail": { "total": "5", "new": "1", "handling": "1", "inactive": "0", "closed": $

    var options = {
        source: json_source,
        rowClass: "classy",
        callback: function(){
            alert("Table generated!");
        }
    };

    ///////////////////////////////
    // Test on a pre-existing table
        $("#dataTable").jsonTable({
                head : ['new','handling','inactive','closed'],
                json : ['new', 'handling', 'inactive','closed']
        });

        $("#dataTable").jsonTableUpdate(options);

        ///////////////////////////////
        // Test on a table not yet attached to the DOM
        var testTable = $("<table></table>");

        testTable.jsonTable({
            head : ['N.', 'new','handling','inactive','closed'],
            json : ['*', 'new','handling','inactive','closed'] // The '*' identity will be incremented at each line
        });

        testTable.jsonTableUpdate(options);

        $("#container").append(testTable);
</script>

 
 <p>
  <h1>Title: Info</h1>
</p>
<table border=1>
  <tbody>
    <tr>
      <td>Total</td>
      <td>New</td>
      <td>Handling</td>
      <td>Inactive</td>
      <td>Closed</td>
    </tr>
    <tr>
      <td>12</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>11</td>
    </tr>
  </tbody>
</table>
<p></p>
<p>
  <h1>Title: other info</h1>
</p>
<table border=1>
  <tbody>
    <tr>
      <td>Total</td>
      <td>New</td>
      <td>Handling</td>
      <td>Inactive</td>
      <td>Closed</td>
    </tr>
    <tr>
      <td>5</td>
      <td>1</td>
      <td>1</td>
      <td>0</td>
      <td>3</td>
    </tr>
  </tbody>
</table> 

Комментарии:

1. вероятно, произошла ошибка в вашем коде. Я не вижу javascript, который вы используете для вывода таблицы. Можете ли вы исправить?

Ответ №1:

Вы можете попробовать следующий код

 let data = [{
            "title": "info",
            "detail": {
                "total": "12",
                "new": "1",
                "handling": "0",
                "inactive": "0",
                "closed": "11"
            }
        }, {
            "title": "other info",
            "detail": {
                "total": "5",
                "new": "1",
                "handling": "1",
                "inactive": "0",
                "closed": "3"
            }
        }]

        let main = document.querySelector('#main');
        let appendString = ''
        for (let i = 0; i < data.length; i  ) {
            appendString  = `<p><h1>Title:${data[i].title}</h1></p>
                <table border=1 >
                    <tbody>
                        <tr>
                            <td>Total</td>
                            <td>New</td>
                            <td>Handling</td>
                            <td>Inactive</td>
                            <td>Closed</td>
                        </tr>
                        <tr>
                            <td>${data[i].detail.total}</td>
                            <td>${data[i].detail.new}</td>
                            <td>${data[i].detail.handling}</td>
                            <td>${data[i].detail.inactive}</td>
                            <td>${data[i].detail.closed}</td>
                        </tr>
                    </tbody>
</table >`
        }
        main.innerHTML = appendString 
 <div id="main"></div> 

Ответ №2:

Рассматривали ли вы возможность использования какого-либо движка шаблонов, такого как PUG?

Это стало бы до смешного просто с использованием PUG:

 each t in tables
  h1=t.title
  table
    tr
      each v, h in t.detail
        th=h
    tr
      each v in t.detail
        td=v
 

Предполагая, что модель, такая как:

 {
    tables: [
        {
            "title": "info",
            "detail": {
                "total": "12",
                "new": "1",
                "handling": "0",
                "inactive": "0",
                "closed": "11"
            }
        }, {
            "title": "other info",
            "detail": {
                "total": "5",
                "new": "1",
                "handling": "1",
                "inactive": "0",
                "closed": "3"
            }
        }
    ],
}
 

Ответ №3:

Предполагая, что вы действительно хотите использовать собственный javascript и не использовать какие-либо инструменты / фреймворки javascript, такие как jQuery, вы можете сделать это, как показано ниже:

 <html>
<head>
</head>
<body>
    <script type="text/javascript">
        var jsondata = [{
            "title": "info",
            "detail": {
                "total": "12",
                "new": "1",
                "handling": "0",
                "inactive": "0",
                "closed": "11"
                }
            }, {
            "title": "other info",
            "detail": {
                "total": "5",
                "new": "1",
                "handling": "1",
                "inactive": "0",
                "closed": "3"
                }
            }];

        for (var jsonitem of jsondata) {
            document.write('<p><h1>Title: '   jsonitem.title   '</h1></p>');
            document.write('<table border=1><tbody>');
            document.write('<tr><td>Total</td><td>New</td><td>Handling</td><td>Inactive</td><td>Closed</td></tr>');

            document.write('<tr><td>'   jsonitem.detail.total   '</td>'  
                                       '<td>'   jsonitem.detail.new   '</td>'  
                                       '<td>'   jsonitem.detail.handling   '</td>'   
                                       '<td>'   jsonitem.detail.inactive   '</td>'   
                                       '<td>'   jsonitem.detail.closed  '</td><tr>');
            document.write('</tbody></table>');
        } 
    </script>
</body>
</html>
 

Приведенный выше код является доказательством концепции, вам решать изменить его так, чтобы он работал в соответствии с тем, что вам нравится отображать.