Преобразование данных таблицы HTML в объект JSON в jQuery
Кто-нибудь знает, как преобразовать таблицу таблиц HTML в хороший объект JSON для управления с помощью jQuery?
Ответы
Ответ 1
Таблица HTML? Как, все содержимое <td>
в 2-мерном массиве?
var tbl = $('table#whatever tr').map(function() {
return $(this).find('td').map(function() {
return $(this).html();
}).get();
}).get();
Затем просто используйте $.json(или любую другую библиотеку), чтобы превратить это в строку JSON.
edit — (shim here) .map()
из прототипа массива:
var tbl = $('table#whatever tr').get().map(function(row) {
return $(row).find('td').get().map(function(cell) {
return $(cell).html();
});
});
Функция jQuery .map()
имеет "функцию" сглаживания возвращенных массивов в массив результатов. То есть, если функция обратного вызова возвращает значение, которое является самим массивом, вместо этого возвращаемый массив становится значением одной ячейки результата .map()
, каждый элемент добавляется к результату.
Это может сработать для использования исходной версии jQuery и просто обернуть дополнительный массив вокруг возвращаемых значений.
Ответ 2
Вы имеете в виду следующую ситуацию?
Дано:
A1 B1 C1 ...
A2 B2 C2 ...
...
Нужно:
{"1": ["A1", "B1", "C1", ...],
"2": ["A2", "B2", "C2", ...], ...}
Итак, используйте следующую функцию, которая создает действительную функцию JSON-String без трейлинга ",":
function html2json() {
var json = '{';
var otArr = [];
var tbl2 = $('#dest_table tr').each(function(i) {
x = $(this).children();
var itArr = [];
x.each(function() {
itArr.push('"' + $(this).text() + '"');
});
otArr.push('"' + i + '": [' + itArr.join(',') + ']');
})
json += otArr.join(",") + '}'
return json;
}
Ответ 3
Мне нужно то же самое, кроме как с возможностью игнорировать столбцы, переопределять значения и не путать вложенные таблицы. Я закончил писать jQuery плагин table-to-json:
https://github.com/lightswitch05/table-to-json
Все, что вам нужно сделать, это выбрать свою таблицу с помощью jQuery и вызвать плагин:
var table = $('#example-table').tableToJSON();
Вот демонстрация этого в действии:
http://jsfiddle.net/Crw2C/173/
Ответ 4
{ "0":"[
['Product','Available','Issue','With Store'],
['GV Rs. 100/-','4461','0','226'],
['PV RED','8','0','0']
]"
}