Czy istnieje naprawdę łatwy sposób, aby wziąć tablicę obiektów JSON i przekształcić ją w tabelę HTML, z wyłączeniem kilku pól? A może będę musiał to zrobić ręcznie?
javascript
jquery
json
ajax
html-table
Josh Stodola
źródło
źródło
Użycie jQuery uprości to.
Poniższy kod pobierze tablicę tablic i zapisze je i przekształci w wiersze i komórki.
$.getJSON(url , function(data) { var tbl_body = ""; var odd_even = false; $.each(data, function() { var tbl_row = ""; $.each(this, function(k , v) { tbl_row += "<td>"+v+"</td>"; }); tbl_body += "<tr class=\""+( odd_even ? "odd" : "even")+"\">"+tbl_row+"</tr>"; odd_even = !odd_even; }); $("#target_table_id tbody").html(tbl_body); });
Możesz dodać czek dla kluczy, które chcesz wykluczyć, dodając coś takiego jak
var expected_keys = { key_1 : true, key_2 : true, key_3 : false, key_4 : true };
na początku funkcji zwrotnej getJSON i dodając:
if ( ( k in expected_keys ) && expected_keys[k] ) { ... }
wokół linii tbl_row + =.
Edycja: poprzednio przypisywano zmienną zerową
Edit: Wersja na podstawie Timmmm „s wtrysku wolne składki.
$.getJSON(url , function(data) { var tbl_body = document.createElement("tbody"); var odd_even = false; $.each(data, function() { var tbl_row = tbl_body.insertRow(); tbl_row.className = odd_even ? "odd" : "even"; $.each(this, function(k , v) { var cell = tbl_row.insertCell(); cell.appendChild(document.createTextNode(v.toString())); }); odd_even = !odd_even; }); $("#target_table_id").append(tbl_body); //DOM table doesn't have .appendChild });
źródło
<tr>
przemian mieć klasę parzystą lub nieparzystą?Utwórz tabelę HTML z tablicy obiektów JSON, rozszerzając $, jak pokazano poniżej
$.makeTable = function (mydata) { var table = $('<table border=1>'); var tblHeader = "<tr>"; for (var k in mydata[0]) tblHeader += "<th>" + k + "</th>"; tblHeader += "</tr>"; $(tblHeader).appendTo(table); $.each(mydata, function (index, value) { var TableRow = "<tr>"; $.each(value, function (key, val) { TableRow += "<td>" + val + "</td>"; }); TableRow += "</tr>"; $(table).append(TableRow); }); return ($(table)); };
i użyj w następujący sposób:
var mydata = eval(jdata); var table = $.makeTable(mydata); $(table).appendTo("#TableCont");
gdzie TableCont to jakiś div
źródło
Czysty sposób HTML, nie wrażliwy jak inne AFAIK:
// Function to create a table as a child of el. // data must be an array of arrays (outer array is rows). function tableCreate(el, data) { var tbl = document.createElement("table"); tbl.style.width = "70%"; for (var i = 0; i < data.length; ++i) { var tr = tbl.insertRow(); for(var j = 0; j < data[i].length; ++j) { var td = tr.insertCell(); td.appendChild(document.createTextNode(data[i][j].toString())); } } el.appendChild(tbl); }
Przykładowe użycie:
$.post("/whatever", { somedata: "test" }, null, "json") .done(function(data) { rows = []; for (var i = 0; i < data.Results.length; ++i) { cells = []; cells.push(data.Results[i].A); cells.push(data.Results[i].B); rows.push(cells); } tableCreate($("#results")[0], rows); });
źródło
Konwersja tablicy 2D JavaScript do tabeli HTML
Aby zamienić tablicę JavaScript 2D w tabelę HTML, naprawdę potrzebujesz trochę kodu:
function arrayToTable(tableData) { var table = $('<table></table>'); $(tableData).each(function (i, rowData) { var row = $('<tr></tr>'); $(rowData).each(function (j, cellData) { row.append($('<td>'+cellData+'</td>')); }); table.append(row); }); return table; } $('body').append(arrayToTable([ ["John","Slegers",34], ["Tom","Stevens",25], ["An","Davies",28], ["Miet","Hansen",42], ["Eli","Morris",18] ]));
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
Ładowanie pliku JSON
Jeśli chcesz załadować swoją tablicę 2D z pliku JSON, będziesz potrzebować także trochę kodu Ajax:
$.ajax({ type: "GET", url: "data.json", dataType: 'json', success: function (data) { $('body').append(arrayToTable(data)); } });
źródło
W przypadku bardzo zaawansowanych obiektów JSON do tabel HTML możesz wypróbować Moje rozwiązanie jQuery, które jest oparte na tym zamkniętym wątku .
var myList=[{"name": "abc","age": 50},{"name": {"1": "piet","2": "jan","3": "klaas"},"age": "25","hobby": "watching tv"},{"name": "xyz","hobby": "programming","subtable": [{"a": "a","b": "b"},{"a": "a","b": "b"}]}]; // Builds the HTML Table out of myList json data from Ivy restful service. function buildHtmlTable() { addTable(myList, $("#excelDataTable")); } function addTable(list, appendObj) { var columns = addAllColumnHeaders(list, appendObj); for (var i = 0; i < list.length; i++) { var row$ = $('<tr/>'); for (var colIndex = 0; colIndex < columns.length; colIndex++) { var cellValue = list[i][columns[colIndex]]; if (cellValue == null) { cellValue = ""; } if (cellValue.constructor === Array) { $a = $('<td/>'); row$.append($a); addTable(cellValue, $a); } else if (cellValue.constructor === Object) { var array = $.map(cellValue, function (value, index) { return [value]; }); $a = $('<td/>'); row$.append($a); addObject(array, $a); } else { row$.append($('<td/>').html(cellValue)); } } appendObj.append(row$); } } function addObject(list, appendObj) { for (var i = 0; i < list.length; i++) { var row$ = $('<tr/>'); var cellValue = list[i]; if (cellValue == null) { cellValue = ""; } if (cellValue.constructor === Array) { $a = $('<td/>'); row$.append($a); addTable(cellValue, $a); } else if (cellValue.constructor === Object) { var array = $.map(cellValue, function (value, index) { return [value]; }); $a = $('<td/>'); row$.append($a); addObject(array, $a); } else { row$.append($('<td/>').html(cellValue)); } appendObj.append(row$); } } // Adds a header row to the table and returns the set of columns. // Need to do union of keys from all records as some records may not contain // all records function addAllColumnHeaders(list, appendObj) { var columnSet = []; var headerTr$ = $('<tr/>'); for (var i = 0; i < list.length; i++) { var rowHash = list[i]; for (var key in rowHash) { if ($.inArray(key, columnSet) == -1) { columnSet.push(key); headerTr$.append($('<th/>').html(key)); } } } appendObj.append(headerTr$); return columnSet; }
źródło
Możesz użyć wtyczki jQuery, która akceptuje dane JSON, aby wypełnić tabelę. jsonTable
źródło
Znalazłem duplikat tutaj: Konwertuj dane json na tabelę html
Cóż, istnieje wiele wtyczek, w tym komercyjna (Zrobić to jako projekt komercyjny ?! Trochę przesadzone ... ale możesz zapłacić tutaj: https://github.com/alfajango/jquery-dynatable )
Ten ma więcej widelca: https://github.com/afshinm/Json-to-HTML-Table
//Example data, Object var objectArray = [{ "Total": "34", "Version": "1.0.4", "Office": "New York" }, { "Total": "67", "Version": "1.1.0", "Office": "Paris" }]; //Example data, Array var stringArray = ["New York", "Berlin", "Paris", "Marrakech", "Moscow"]; //Example data, nested Object. This data will create nested table also. var nestedTable = [{ key1: "val1", key2: "val2", key3: { tableId: "tblIdNested1", tableClassName: "clsNested", linkText: "Download", data: [{ subkey1: "subval1", subkey2: "subval2", subkey3: "subval3" }] } }];
Zastosuj kod
//Only first parameter is required var jsonHtmlTable = ConvertJsonToTable(objectArray, 'jsonTable', null, 'Download');
Lub możesz również sprawdzić te wtyczki jQuery: https://github.com/jongha/jquery-jsontotable
Myślę, że wtyczki jongha są łatwiejsze w użyciu
<div id="jsontotable" class="jsontotable"></div> var data = [[1, 2, 3], [1, 2, 3]]; $.jsontotable(data, { id: '#jsontotable', header: false });
źródło
Jeśli akceptujesz użycie innego narzędzia zależnego od jQuery , poleciłbym użycie Tabulatora . Wtedy nie będziesz musiał pisać HTML ani żadnego innego kodu generującego DOM, zachowując przy tym dużą elastyczność w zakresie formatowania i przetwarzania danych tabeli.
Aby zapoznać się z innym działającym przykładem wykorzystującym Node , możesz spojrzeć na projekt demonstracyjny MMM-Tabulator .
źródło
Jednym prostym sposobem na to jest:
var data = [{ "Total": 34, "Version": "1.0.4", "Office": "New York" }, { "Total": 67, "Version": "1.1.0", "Office": "Paris" }]; drawTable(data); function drawTable(data) { // Get Table headers and print 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>")); } // Print the content of rows in DataTable for (var i = 0; i < data.length; i++) { drawRow(data[i]); } } function drawRow(rowData) { var row = $("<tr />") $("#DataTable").append(row); row.append($("<td>" + rowData["Total"] + "</td>")); row.append($("<td>" + rowData["Version"] + "</td>")); row.append($("<td>" + rowData["Office"] + "</td>")); }
table { border: 1px solid #666; width: 100%; text-align: center; } th { background: #f8f8f8; font-weight: bold; padding: 2px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table id="DataTable"></table>
źródło
z czystym jQuery:
window.jQuery.ajax({ type: "POST", url: ajaxUrl, contentType: 'application/json', success: function (data) { var odd_even = false; var response = JSON.parse(data); var head = "<thead class='thead-inverse'><tr>"; $.each(response[0], function (k, v) { head = head + "<th scope='row'>" + k.toString() + "</th>"; }) head = head + "</thead></tr>"; $(table).append(head);//append header var body="<tbody><tr>"; $.each(response, function () { body=body+"<tr>"; $.each(this, function (k, v) { body=body +"<td>"+v.toString()+"</td>"; }) body=body+"</tr>"; }) body=body +"</tbody>"; $(table).append(body);//append body }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.responsetext); } });
źródło
Możesz to zrobić dość łatwo za pomocą Javascript + Jquery, jak poniżej. Jeśli chcesz wykluczyć jakąś kolumnę, po prostu napisz instrukcję if wewnątrz pętli for, aby pominąć te kolumny. Mam nadzieję że to pomoże!
//Sample JSON 2D array var json = [{ "Total": "34", "Version": "1.0.4", "Office": "New York" }, { "Total": "67", "Version": "1.1.0", "Office": "Paris" }]; // Get Table headers and print for (var k = 0; k < Object.keys(json[0]).length; k++) { $('#table_head').append('<td>' + Object.keys(json[0])[k] + '</td>'); } // Get table body and print for (var i = 0; i < Object.keys(json).length; i++) { $('#table_content').append('<tr>'); for (var j = 0; j < Object.keys(json[0]).length; j++) { $('#table_content').append('<td>' + json[i][Object.keys(json[0])[j]] + '</td>'); } $('#table_content').append('</tr>'); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <thead> <tr id="table_head"> </tr> </thead> <tbody id="table_content"> </tbody> </table>
źródło
Zmodyfikowano kod bitowy kodu @ Dr.sai. Mam nadzieję, że to się przyda.
(function ($) { /** * data - array of record * hidecolumns, array of fields to hide * usage : $("selector").generateTable(json, ['field1', 'field5']); */ 'use strict'; $.fn.generateTable = function (data, hidecolumns) { if ($.isArray(data) === false) { console.log('Invalid Data'); return; } var container = $(this), table = $('<table>'), tableHead = $('<thead>'), tableBody = $('<tbody>'), tblHeaderRow = $('<tr>'); $.each(data, function (index, value) { var tableRow = $('<tr>').addClass(index%2 === 0 ? 'even' : 'odd'); $.each(value, function (key, val) { if (index == 0 && $.inArray(key, hidecolumns) <= -1 ) { var theaddata = $('<th>').text(key); tblHeaderRow.append(theaddata); } if ($.inArray(key, hidecolumns) <= -1 ) { var tbodydata = $('<td>').text(val); tableRow.append(tbodydata); } }); $(tableBody).append(tableRow); }); $(tblHeaderRow).appendTo(tableHead); tableHead.appendTo(table); tableBody.appendTo(table); $(this).append(table); return this; }; })(jQuery);
Mam nadzieję, że pomoże to również ukryć niektóre kolumny. Link do pliku
źródło
Obrotowy widok jednorzędowy z nagłówkami po lewej stronie na podstawie odpowiedzi @ Dr.sai powyżej.
Wstrzyknięcie uniemożliwione przez metodę .text jQuery
$.makeTable = function (mydata) { var table = $('<table>'); $.each(mydata, function (index, value) { // console.log('index '+index+' value '+value); $(table).append($('<tr>')); $(table).append($('<th>').text(index)); $(table).append($('<td>').text(value)); }); return ($(table)); };
źródło
Jeszcze krótsza droga
$.makeTable = function (mydata) { if (mydata.length <= 0) return ""; return $('<table border=1>').append("<tr>" + $.map(mydata[0], function (val, key) { return "<th>" + key + "</th>"; }).join("\n") + "</tr>").append($.map(mydata, function (index, value) { return "<tr>" + $.map(index, function (val, key) { return "<td>" + val + "</td>"; }).join("\n") + "</tr>"; }).join("\n")); };
źródło