将表格 HTML 转换为 JSON

Posted

技术标签:

【中文标题】将表格 HTML 转换为 JSON【英文标题】:Convert table HTML to JSON 【发布时间】:2015-09-02 01:57:33 【问题描述】:

我有这个:

<table>
    <tr>
        <th>Name:</th>
        <td>Carlos</td>
    </tr>        
    <tr>
        <th>Age:</th>
        <td>22</td>
    </tr>
</table>

我需要一个 JSON 格式。

"Name":"Carlos","Age": 22

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

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

【问题讨论】:

github脚本目前给你什么结果? 可能最容易将其转换为 Object 并使用 JSON.stringify。这些数据似乎不是表格,还有更多吗? 您愿意将数据放入列而不是行吗? jsfiddle.net/Crw2C/773@Markasoftware @Markasoftware 问题是我收到了 html 表格格式 【参考方案1】:

假设您只需要获取每行的第一个/第二个单元格作为键/值对,您可以使用.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);
<table>
    <tr>
        <th>Name:</th>
        <td>Carlos</td>
    </tr>        
    <tr>
        <th>Age:</th>
        <td>22</td>
    </tr>
</table>
<pre></pre>

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

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

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

【讨论】:

我总是对将宿主对象作为 this 传递给内置方法感到不安。 应该没问题,但是 IE8 会抛出一个错误(与此处无关,因为 reduce 无论如何都需要 polyfill)。可能还有其他浏览器会做同样的事情。 @RobG:这是值得考虑的一点。正如你所说,IE8 不支持 .reduce() 并且 polyfill 不会有任何问题。至于其他浏览器,(如果它们存在的话)它们将属于没有太多人真正关心的支持范围。但是你的答案也是一个好方法(而且更快)所以+1。也用于使用似乎很少有人使用的.rows.cells【参考方案2】:

您可以将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>

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

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

【讨论】:

【参考方案3】:

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);
<table>
    <tr>
        <th>Name:</th>
        <td>Carlos</td>
    </tr>        
    <tr>
        <th>Age:</th>
        <td>22</td>
    </tr>
</table>
<pre></pre>

【讨论】:

完美解决方案【参考方案4】:

您正在使用的Table-to-JSON library 在您的表格中需要不同的格式。

它需要一个表格,第一行包含所有标题,然后是后续行中的数据。

换句话说,它希望您的表格具有这样的结构

<table>
    <tr>
        <th>Name</th>
        <th>Age</th>
    </tr>        
    <tr>
        <td>Carlos</td>
        <td>22</td>
    </tr>
</table>

这是a forked version of your JSFiddle,它正在其中工作。

【讨论】:

他在 cmets 中说他不能这样做,他正在从另一个来源获取桌子

以上是关于将表格 HTML 转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 对象转换为 HTML 表格? [关闭]

将表格 HTML 转换为 JSON

将 JSON 字符串转换为对象并显示为 HTML 表格

在 jQuery 中将 HTML 表格数据转换为 JSON 对象

如何将 HTML 表转换为 JSON 并将 JSON 与 JSON.NET 一起使用?

将excel电子表格转换为json