Convert json data to html table

Is there a jQuery or javascript library that generates a dynamic table with json data? I do not want to define columns, the library should read the keys in the json hash and generate the columns.

Of course, I can iterate over json data myself and generate an html table. I just want to know if there is such a library that I can just reuse.

+95
json javascript html html-table
Mar 03 2018-11-11T00:
source share
4 answers

Thank you all for your answers. I wrote one myself. Note that this uses jQuery.

Code snippet:

var myList = [ { "name": "abc", "age": 50 }, { "age": "25", "hobby": "swimming" }, { "name": "xyz", "hobby": "programming" } ]; // Builds the HTML Table out of myList. function buildHtmlTable(selector) { var columns = addAllColumnHeaders(myList, selector); for (var i = 0; i < myList.length; i++) { var row$ = $('<tr/>'); for (var colIndex = 0; colIndex < columns.length; colIndex++) { var cellValue = myList[i][columns[colIndex]]; if (cellValue == null) cellValue = ""; row$.append($('<td/>').html(cellValue)); } $(selector).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(myList, selector) { var columnSet = []; var headerTr$ = $('<tr/>'); for (var i = 0; i < myList.length; i++) { var rowHash = myList[i]; for (var key in rowHash) { if ($.inArray(key, columnSet) == -1) { columnSet.push(key); headerTr$.append($('<th/>').html(key)); } } } $(selector).append(headerTr$); return columnSet; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body onLoad="buildHtmlTable('#excelDataTable')"> <table id="excelDataTable" border="1"> </table> </body> 
+117
Jul 14 2018-12-12T00:
source share

I rewrote your code in vanilla-js using the DOM methods to prevent html injection.

demonstration

 var _table_ = document.createElement('table'), _tr_ = document.createElement('tr'), _th_ = document.createElement('th'), _td_ = document.createElement('td'); // Builds the HTML Table out of myList json data from Ivy restful service. function buildHtmlTable(arr) { var table = _table_.cloneNode(false), columns = addAllColumnHeaders(arr, table); for (var i = 0, maxi = arr.length; i < maxi; ++i) { var tr = _tr_.cloneNode(false); for (var j = 0, maxj = columns.length; j < maxj; ++j) { var td = _td_.cloneNode(false); cellValue = arr[i][columns[j]]; td.appendChild(document.createTextNode(arr[i][columns[j]] || '')); tr.appendChild(td); } table.appendChild(tr); } return table; } // 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(arr, table) { var columnSet = [], tr = _tr_.cloneNode(false); for (var i = 0, l = arr.length; i < l; i++) { for (var key in arr[i]) { if (arr[i].hasOwnProperty(key) && columnSet.indexOf(key) === -1) { columnSet.push(key); var th = _th_.cloneNode(false); th.appendChild(document.createTextNode(key)); tr.appendChild(th); } } } table.appendChild(tr); return columnSet; } document.body.appendChild(buildHtmlTable([{ "name": "abc", "age": 50 }, { "age": "25", "hobby": "swimming" }, { "name": "xyz", "hobby": "programming" } ])); 
+50
Jan 11 '14 at
source share

You can use a simple jQuery jPut plugin

http://plugins.jquery.com/jput/

 <script> $(document).ready(function(){ var json = [{"name": "name1","email":"email1@domain.com"},{"name": "name2","link":"email2@domain.com"}]; //while running this code the template will be appended in your div with json data $("#tbody").jPut({ jsonData:json, //ajax_url:"youfile.json", if you want to call from a json file name:"tbody_template", }); }); </script> <table jput="t_template"> <tbody jput="tbody_template"> <tr> <td>{{name}}</td> <td>{{email}}</td> </tr> </tbody> </table> <table> <tbody id="tbody"> </tbody> </table> 
+12
Jun 01 '14 at 15:06
source share

Check out the JSON2HTML http://json2html.com/ plugin for jQuery. This allows you to specify a conversion that will convert your JSON object to an HTML template. Use the constructor at http://json2html.com/ to get the json transform object for any desired HTML template. In your case, it will be a table with a row having the following conversion.

Example:

 var transform = {"tag":"table", "children":[ {"tag":"tbody","children":[ {"tag":"tr","children":[ {"tag":"td","html":"${name}"}, {"tag":"td","html":"${age}"} ]} ]} ]}; var data = [ {'name':'Bob','age':40}, {'name':'Frank','age':15}, {'name':'Bill','age':65}, {'name':'Robert','age':24} ]; $('#target_div').html(json2html.transform(data,transform)); 
+11
Jun 23 '11 at 18:57
source share



All Articles