我已经创建了一个将html表转换为JSON的示例应用程序。问题是JSON没有重复值,我想从JSON中删除最后两列。
生成的JSON如下所示
[
{
"Person Name":"Smith",
"Score":"disqualified",
"Price":"150",
"Tax":"41"
},
{
"Person Name":"Jackson",
"Score":"94",
"Price":"250",
"Tax":"81"
},
{
"Person Name":"Doe",
"Score":"80",
"Price":"950",
"Tax":"412"
},
{
"Person Name":"Johnson",
"Score":"67",
"Price":"750",
"Tax":"941"
}
]
但我期望的JSON就像
[
{
"Person Name":"Jill",
"Person Name":"Smith",
"Score":"disqualified"
},
{
"Person Name":"Eve",
"Person Name":"Smith",
"Score":"94"
},
{
"Person Name":"John",
"Person Name":"Smith",
"Score":"80"
},
{
"Person Name":"Adam",
"Person Name":"Smith",
"Score":"67"
}
]
任何人都可以告诉我如何从表中生成上述JSON
我的代码如下所示。
html代码
<table id='example-table'>
<thead>
<tr>
<th>Person Name</th>
<th>Person Name</th>
<th data-override="Score">Points</th>
<th>Price</th>
<th>Tax</th>
</tr>
</thead>
<tbody>
<tr>
<td>Jill</td>
<td>Smith</td>
<td data-override="disqualified">50</td>
<td>150</td>
<td>41</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
<td>250</td>
<td>81</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
<td>950</td>
<td>412</td>
</tr>
<tr>
<td>Adam</td>
<td>Johnson</td>
<td>67</td>
<td>750</td>
<td>941</td>
</tr>
</tbody>
</table>
<button id="convert-table" >Convert!</button>
javascript代码
$('#convert-table').click( function() {
var table = $('#example-table').tableToJSON();
console.log(table);
alert(JSON.stringify(table));
});
答案 0 :(得分:10)
类似的东西会起作用(不是很好,但是)
说明:
您可以使用ignoreColumns来避免使用第3列和第4列。
您可以使用标题更改“标题”(json文件中的键)。但这也将采用第一行(TH的那一行)。
所以我们必须在构建json数组后删除第一行。
$('#convert-table').click( function() {
var $table = $('#example-table');
var table = $table.tableToJSON(
{
ignoreColumns:[3, 4],
headings: ['FirstName', 'LastName', 'Score']
});
var newTable = $.map(table, function(e){
return (e.FirstName == "Person Name") ? null : e;
});
console.log(newTable);
alert(JSON.stringify(newTable));
});
请参阅jsfiddle
修改强>
如果带有Person Name的列数是动态的,你可以做类似的事情(假设你从不想要最后两行)
function convertToTable(el, numberOfColumns, columnNames) {
var columnsToIgnore = [numberOfColumns-2, numberOfColumns-1];
var table = el.tableToJSON(
{
ignoreColumns:columnsToIgnore,
headings: columnNames
});
var result = $.map(table, function(e){
return (e['Person Name0'] == "Person Name") ? null : e;
});
alert(JSON.stringify(result));
}
$('#convert-table').click( function() {
var $table = $('#example-table');
var columns = $table.find('th');
var numberOfColumns = columns.length;
var columnNames = columns.map(function(index) {
var text = $(this).text();
return text == 'Person Name' ? text + index : text;
}).get();
convertToTable($table, numberOfColumns, columnNames);
});
请参阅JsFiddle
答案 1 :(得分:3)
您不能拥有重复的密钥,但您可以使用一系列名称。例如:
{
"PersonNames":["John","Smith"],
"Score":"80"
},
答案 2 :(得分:1)
删除最后两个字段使用“ignoreColumns”选项
var table = $('#example-table').tableToJSON({
ignoreColumns:[2,3]
});
并使标头唯一
<th>Person Name</th>
<th>Person SurName</th>
答案 3 :(得分:1)
试试这个:
$('#convert-table').click( function() {
var table = $('#example-table').tableToJSON({
ignoreColumns:[3,4]}
);
console.log(table);
alert(JSON.stringify(table));
});
答案 4 :(得分:0)
从行开始格式化HTML数据的方式。
$("#del_player").on("click", function() {
var row_to_del = $("#table_player tbody tr[active=true]");
var arr = [];
$.each(row_to_del, function(key, val){
arr.push(val.outerText.split('\t'));
});
console.log(JSON.stringify(arr));
})