javascript - 将 HTML 表格转换为 Json 文件

标签 javascript php html json converters

是否可以像这样将 HTML 表格转换为 json:

姓名性别年龄

约翰中号 18

迈克男 19

JSON:

     {"Values" : {

    "1" : {
                "name": "John",
                "Gender": "M",
                "Age": "18"
            },

    "2": {
                "name": "Mike",
                "Gender": "M",
                "Age": "19"
            },
}}

我已经有了这个代码:

    (function() {
    var jsonArr = [];
    var obj = {};
    var thNum = document.getElementsByTagName('th').length;
    var arrLength = document.getElementsByTagName('td').length;

    for(i = 0; i<arrLength;i++){
        if(i%thNum==0){
            obj = {};
        }
        var head = document.getElementsByTagName('th')[i%thNum].innerHTML;
        var content = document.getElementsByTagName('td')[i].innerHTML;
        obj[head] = content;
        if(i%thNum==0){
            jsonArr.push(obj);
        }   
    }           
    document.write("<br>"+JSON.stringify(jsonArr));
})();

脚本将其转换为:

    <!DOCTYPE html>
<TABLE border="3" rules="all" bgcolor="#E7E7E7" cellpadding="1" cellspacing="1">
<TR>
<TH align=center><font size="3" face="Arial">Date</font></TH>
<TH align=center><font size="3" face="Arial"><B>Teacher</B></font></TH>
<TH align=center><font size="3" face="Arial">?</font></TH>
<TH align=center><font size="3" face="Arial">Hour</font></TH>
<TH align=center><font size="3" face="Arial">Subject</font></TH>
<TH align=center><font size="3" face="Arial">Class</font></TH>
<TH align=center><font size="3" face="Arial">Room</font></TH>
<TH align=center><font size="3" face="Arial">(Teacher)</font></TH>
<TH align=center><font size="3" face="Arial">(Room)</font></TH>
<TH align=center><font size="3" face="Arial">XYY</font></TH>
<TH align=center><font size="3" face="Arial"><B>Information</B></font></TH>
<TH align=center><font size="3" face="Arial">(Le.) nach</font></TH>
</TR>
<TR><TD align=center><font size="3" face="Arial">24.9.</font></TD>
<TD align=center><font size="3" face="Arial"><B><strike>Dohe</strike></B></font></TD>
<TD align=center><font size="3" face="Arial">Free</font></TD>
<TD align=center><font size="3" face="Arial">1</font></TD>
<TD align=center><font size="3" face="Arial"><strike>Math</strike></font> </TD>
<TD align=center><font size="3" face="Arial">(9)</font> </TD>
<TD align=center><font size="3" face="Arial">---</font> </TD>
<TD align=center><font size="3" face="Arial"><strike>Dohe</strike></font></TD>
<TD align=center><font size="3" face="Arial">A001</font></TD>
<TD align=center>&nbsp;</TD>
<TD align=center>&nbsp;</TD>
<TD align=center><font size="3" face="Arial">Free.</font></TD>
</TR>
</TABLE>
<script>
(function() {
    var jsonArr = [];
    var obj = {};
    var thNum = document.getElementsByTagName('th').length;
    var arrLength = document.getElementsByTagName('td').length;

    for(i = 0; i < arrLength; i++){
        if(i%thNum === 0){
            obj = {};
        }
        var head = document.getElementsByTagName('th')[i%thNum].innerHTML;
        var content = document.getElementsByTagName('td')[i].innerHTML;
        obj[head] = content;
        if(i%thNum === 0){
            jsonArr.push(obj);
        }   
    }           
    document.write("<br>"+JSON.stringify(jsonArr));
})();
</script>
</body>
</html>

为此:

[{"Date":"24.9.","Teacher":"Dohe","?":"Free","Hour":"1","Subject":"Math ","Class":"(9) ","Room":"--- ","(Teacher)":"Dohe","(Room)":"A001","XYY":" ","Information":" ","(Le.) nach":"Free."}]

但我之前需要“值”标签和“1”、“2”,它们应该按行自动创建。 至少可以将其写入新的 .json 文件,如 data.json?

最佳答案

如果要将行数组表示为对象,请将 jsonArr.push(obj) 更改为 jsonObj[++rowIx] = obj,其中 jsonObj 之前已经初始化为 {},而 rowIx 是一个已经初始化为 0 的计数器(可能比在 i 上做数学运算更简单)。

您发布的预期输出不是有效的 JSON,因此我假设它应该被另一组大括号包裹:

document.write("<br>"+JSON.stringify({"Values": jsonObj}));

至于保存到文件,以可移植的方式很难做到这一点。还有其他几个解决此问题的答案,包括以下内容:

关于javascript - 将 HTML 表格转换为 Json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950941/

相关文章:

html - CSS - 垂直线

javascript - Node.JS Google Slides API 类型错误 : Cannot read property 'presentations' of undefined

javascript - forEach inside Ticker 使 Canvas 变慢

javascript - 类型错误 : cb is not a function

javascript - Chartist.js 抛出 TypeError : a is null

php - 仅当它们 = 某些字段时才输出结果

php - Symfony 使用 Swift Mailer 和 o2switch 发送电子邮件

php - 将表名插入另一个表的列中

javascript - 是否可以获取一个已抓取的 html 文件,并获取有关浏览器如何呈现它的信息?

javascript - 如何在不受 JavaScript 严格限制的情况下播放音频?