2010-02-10 31 views
15

¿Alguien sabe cómo convertir una tabla de valores HTML en un buen objeto JSON para ser manipulado con jQuery?Convierta datos de una tabla HTML en un objeto JSON en jQuery

+1

¿Qué quieres decir con "mesa"? Tabla de base de datos? Tabla HTML? – Sampson

+0

posible duplicado de [Iterar a través de la tabla html usando jQuery, convirtiendo los datos de la tabla en JSON] (http://stackoverflow.com/questions/1872485/iterate-through-html-table-using-jquery-converting-the- data-in-the-table-into-js) –

Respuesta

25

¿Una tabla HTML? ¿Te gusta, todos los contenidos de <td> en una matriz de 2 d?

var tbl = $('table#whatever tr').map(function() { 
    return $(this).find('td').map(function() { 
    return $(this).html(); 
    }).get(); 
}).get(); 

Entonces sólo tiene que utilizar $ .json (o cualquier biblioteca que desea) para convertir eso en una cadena JSON.

edición — re-escrito para usar el nativo (shim here) .map() del prototipo matriz:

var tbl = $('table#whatever tr').get().map(function(row) { 
    return $(row).find('td').get().map(function(cell) { 
    return $(cell).html(); 
    }); 
}); 

El .map() función jQuery tiene la "característica" de aplanar las matrices devueltas en la matriz resultado. Es decir, si la función de devolución de llamada devuelve un valor que es en sí mismo una matriz, en lugar de que la matriz devuelta se convierta en el valor de una celda del resultado .map(), sus elementos se agregan al resultado.

puede trabajar para utilizar la versión original de jQuery y simplemente envolver una matriz extra alrededor de los valores devueltos.

+0

La broma aquí puede ser que esto realmente no funciona. El método '.map()' de jQuery tiene la característica (bastante cuestionable, si me preguntas) de aplacar las matrices devueltas. Sin embargo, este enfoque básico funcionaría con el '.map()' nativo que proporcionan los nuevos entornos de JavaScript a través del prototipo de Array. – Pointy

+0

¡Es muy útil! BTW @Pointy, ¿qué pasa si el TD tiene una sola clase en él, por ejemplo, bah bah bah ..., puedo convertirlo a json, por lo que el nombre de la clase se convirtió en el nombre de la propiedad como ese ==> "mensaje": "bah bah bah ...", muchas gracias –

+0

@VirtualJasper sí, ciertamente podrías hacer eso, pero tu necesidad de construir un objeto para cada celda. Haría una nueva pregunta. – Pointy

14

Necesitaba lo mismo, excepto con la capacidad de ignorar columnas, anular valores y no confundir con tablas anidadas. Terminé de escribir un plugin de jQuery mesa-a-JSON:

https://github.com/lightswitch05/table-to-json

Todo lo que tiene que hacer es seleccionar su mesa usando jQuery y llame al plugin:

var table = $('#example-table').tableToJSON(); 

Aquí es una demostración de en acción:

http://jsfiddle.net/Crw2C/173/

+0

Lo malo es que si hay una etiqueta html dentro de la celda, se reemplazará con una cadena vacía. –

+0

@JerryLiang hay una opción 'allowHTML' para conservar las etiquetas HTML – lightswitch05

+0

@ lightswitch05 en su jsfiddle si la tabla contiene un menú desplegable que la forma de obtener solo el valor seleccionado en json ... (En mi caso, senario es lo mismo que usted dijo que también funciona bien su violín, pero en mi tabla en más columna de Estado (menú desplegable) que en json todos los datos brindados para dropdown.plz ... Gracias) –

16

Qué quiere decir la siguiente situación?

Dado:

A1 B1 C1 ... 
A2 B2 C2 ... 
... 

sea necesario:

{"1": ["A1", "B1", "C1", ...], 
"2": ["A2", "B2", "C2", ...], ...} 

a fin de utilizar la siguiente función que crea una función JSON-Cadena válida sin arrastre "":

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; 
} 
+0

este pregunta tiene 3 años y tiene una respuesta aceptada, lol ¿por qué la respondes? – Jimmy

+13

Bueno, mucha gente tendrá el mismo problema que OP. La respuesta de @John puede dar una solución adicional para ellos – didxga

+0

Buen disparo, es increíble. – Tugrul

-4
{ "0":"[ 
    ['Product','Available','Issue','With Store'], 
    ['GV Rs. 100/-','4461','0','226'], 
    ['PV RED','8','0','0'] 
    ]" 
} 
+0

¿cuál es la función de este json – user6379621

Cuestiones relacionadas