Skip to content

Instantly share code, notes, and snippets.

@johannesjo
Last active October 9, 2024 06:06
Show Gist options
  • Save johannesjo/6b11ef072a0cb467cc93a885b5a1c19f to your computer and use it in GitHub Desktop.
Save johannesjo/6b11ef072a0cb467cc93a885b5a1c19f to your computer and use it in GitHub Desktop.
Snippet to convert html table to json (to be used with google chrome or similiar)
function tableToJson(table) {
var data = [];
// first row needs to be headers
var headers = [];
for (var i=0; i<table.rows[0].cells.length; i++) {
headers[i] = table.rows[0].cells[i].innerHTML.toLowerCase().replace(/ /gi,'');
}
// go through cells
for (var i=1; i<table.rows.length; i++) {
var tableRow = table.rows[i];
var rowData = {};
for (var j=0; j<tableRow.cells.length; j++) {
rowData[ headers[j] ] = tableRow.cells[j].innerHTML;
}
data.push(rowData);
}
return data;
}
JSON.stringify(tableToJson($0));
@johannesjo
Copy link
Author

johannesjo commented Apr 23, 2024

And another variant that supports custom headers:

function tableToJson(table, headers = []) {
  var data = [];

  // first row needs to be headers
  if(!headers.length) {
    for (var i = 0; i < table.rows[0].cells.length; i++) {
      headers[i] = table.rows[0].cells[i].innerHTML.toLowerCase().replace(/ /gi, '');
    }
  }

  // go through cells
  for (var i = 1; i < table.rows.length; i++) {

    var tableRow = table.rows[i];
    var rowData = {};

    for (var j = 0; j < tableRow.cells.length; j++) {

      rowData[headers[j]] = tableRow.cells[j].innerHTML;

    }

    data.push(rowData);
  }

  return data;
}

JSON.stringify(tableToJson(document.getElementsByTagName("table")[0], ["nr", "title", "description"]));

@divinity76
Copy link

joining the party,

function tableToObject(table) {
    let trs = table.querySelectorAll('tr');
    let headers = Array.from(trs[0].querySelectorAll('th')).map(th => th.textContent.trim());
    let ret = [];
    for (let i = 1; i < trs.length; i++) {
        let obj = {};
        let tds = trs[i].querySelectorAll('td');
        for (let j = 0; j < tds.length; j++) {
            obj[headers[j]] = tds[j].textContent.trim();
        }
        ret.push(obj);
    }
    return ret;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment