[英]Convert HTML Table to Json file
是否可以像这样将 HTML 表转换为 json:
姓名 性别 年龄
约翰 M 18
迈克 M 19
杰森:
{"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> </TD>
<TD align=center> </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}));
至于保存到文件,以可移植的方式做到这一点很棘手。 还有其他几个答案可以解决这个问题,包括以下内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.