将表格 HTML 转换为 JSON

cna*_*liz 2 html javascript json html-table

我有这个:

<table>
    <tr>
        <th>Name:</th>
        <td>Carlos</td>
    </tr>        
    <tr>
        <th>Age:</th>
        <td>22</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我需要一个 JSON 格式。

{"Name":"Carlos","Age": 22}
Run Code Online (Sandbox Code Playgroud)

我试过https://github.com/lightswitch05/table-to-json但它不适用于每一行的标题:(

编辑:http : //jsfiddle.net/Crw2C/773/

小智 6

假设您需要的只是将每行的第一个/第二个单元格作为键/值对,您可以使用.reduce()迭代行并获取文本内容.cells[0].cells[1]用作每个键/值对:

var t = document.querySelector("table");

var j = [].reduce.call(t.rows, function(res, row) {
    res[row.cells[0].textContent.slice(0,-1)] = row.cells[1].textContent;
    return res
}, {});

document.querySelector("pre").textContent = JSON.stringify(j, null, 2);
Run Code Online (Sandbox Code Playgroud)
<table>
    <tr>
        <th>Name:</th>
        <td>Carlos</td>
    </tr>        
    <tr>
        <th>Age:</th>
        <td>22</td>
    </tr>
</table>
<pre></pre>
Run Code Online (Sandbox Code Playgroud)

Array.prototype.reduce方法接受一个集合并使用累加器将其减少到您想要的任何状态。这里我们只是将其缩减为一个对象,因此我们在回调之后传入一个。

对于每一行,我们使用第一个单元格的内容作为对象键,使用第二个单元格的内容作为值。然后我们从回调中返回对象,以便在下一次迭代中返回给我们。

最后,.reduce()返回我们返回的最后一个东西(当然是我们开始的对象),这就是你的结果。


Rob*_*obG 5

您可以先将 OP 中的表转换为所需的格式,然后将其转换为 Object,然后使用 JSON.stringify 获取所需的字符串:

<table id="t0">
    <tr>
        <th>Name:</th>
        <td>Carlos</td>
    </tr>        
    <tr>
        <th>Age:</th>
        <td>22</td>
    </tr>
</table>

<script>

function tableToJSON(table) {
  var obj = {};
  var row, rows = table.rows;
  for (var i=0, iLen=rows.length; i<iLen; i++) {
    row = rows[i];
    obj[row.cells[0].textContent] = row.cells[1].textContent
  }
  return JSON.stringify(obj);
}

console.log(tableToJSON(document.getElementById('t0'))); // {"Name:":"Carlos","Age:":"22"}"

</script>
Run Code Online (Sandbox Code Playgroud)

但是,这是一个临时解决方案,因此需要一些工作来适应更一般的情况。虽然它显示了这个概念。

请注意,不能保证对象属性将按照它们在表中出现的相同顺序返回,您可能会得到{"Age:":"22","Name:":"Carlos"}.