HTML-таблица для JSON
Мне нужно взять строки таблицы и преобразовать в JSON.
Любые идеи? У меня есть этот код здесь, но он не работает.
function tableToJSON(tableID) {
return $(tableID + " tr").map(function (row) {
return row.descendants().pluck("innerHTML");
}).toJSON();
}
Ответы
Ответ 1
function tableToJson(table) {
var data = [];
// first row needs to be headers
var headers = [];
for (var i=0; i<table.rows[0].cells.length; i++) {
headers[i] = table.rows[0].cells[i].innerHTML.toLowerCase().replace(/ /gi,'');
}
// go through cells
for (var i=1; i<table.rows.length; i++) {
var tableRow = table.rows[i];
var rowData = {};
for (var j=0; j<tableRow.cells.length; j++) {
rowData[ headers[j] ] = tableRow.cells[j].innerHTML;
}
data.push(rowData);
}
return data;
}
Взято из Блог Джона Дайера
Ответ 2
попробуйте $("#"+tableID + " tr")
.
Ответ 3
Вы должны найти это полезным: http://encosia.com/use-jquery-to-extract-data-from-html-lists-and-tables/
Ответ 4
Я был недоволен всеми вышеперечисленными решениями и в итоге написал свой собственный плагин jQuery для этого. Он очень похож на решение, но принимает несколько параметров для настройки результатов, таких как игнорирование скрытых строк, переопределение имен столбцов и переопределение значений ячеек
Плагин можно найти здесь, а также некоторые примеры, если это больше того, что вы ищете: https://github.com/lightswitch05/table-to-json
Ответ 5
Это работало для меня: (у меня было только 2 строки в моей таблице, th и td)
function htmlToJson(table) {
var obj = {},
itemsLength = $(table.find('tbody tr')[0]).find('th').length;
for (i=0;i<itemsLength;i++) {
key = $(table.find('tbody tr')[0]).find('th').eq(i).text();
value = $(table.find('tbody tr')[1]).find('td').eq(i).text();
obj[key] = value;
}
return JSON.stringify(obj)
}
Ответ 6
HTML:
<table id="answered">
<tbody>
<tr>
<td data-id="user.email">[email protected]</td>
<td data-id="meme.yodawg">Yo Dog! I Heard you liked answers, so I answered your question, with a method wrapped in a jQuery plugin!</td>
</tr>
</tbody>
</table>
JQuery
(function($) {
$.extend($.fn, {
tableRowsToJSONWithFilter : function (filter) {
var tableSelector = this, item, attr, data, _JSON = [];
if (typeof(tableSelector) !== 'object') {
return new Error('Invalid tableSelect!');
};
$(tableSelector, 'tr').each(function(index, tr) {
item = {};
$('td', $(this)).each(function(index, td) {
attr = $(td).attr('data-id');
data = $(td).text();
if (attr !== undefined && data !== '' && filter && new RegExp(filter, 'i').test(attr)) {
item[attr] = data;
};
});
_JSON.push(item);
});
return _JSON;
}
})
})(jQuery);
Применение:
$('#answered').tableRowsToJSONWithFilter('yodawg');
Ответ 7
Таблица HTML с темой и телом:
function htmlTableToJson(table, edit = 0, del = 0) {
// If exists the cols: "edit" and "del" to remove from JSON just pass values = 1 to edit and del params
var minus = edit + del;
var data = [];
var colsLength = $(table.find('thead tr')[0]).find('th').length - minus;
var rowsLength = $(table.find('tbody tr')).length;
// first row needs to be headers
var headers = [];
for (var i=0; i<colsLength; i++) {
headers[i] = $(table.find('thead tr')[0]).find('th').eq(i).text();
}
// go through cells
for (var i=0; i<rowsLength; i++) {
var tableRow = $(table.find('tbody tr')[i]);
var rowData = {};
for (var j=0; j<colsLength; j++) {
rowData[ headers[j] ] = tableRow.find('td').eq(j).text();
}
data.push(rowData);
}
return data;
}