Necesito poner un objeto JSON en un atributo en un elemento HTML.
El HTML no tiene que validar.Respondido por Quentin: Almacene el JSON en un
data-*
atributo , que es HTML5 válido.El objeto JSON podría tener cualquier tamaño, es decir, enorme
Respuesta de Maiku Mori: El límite para un atributo HTML es potencialmente de 65536 caracteres .
¿Qué pasa si el JSON contiene caracteres especiales? p.ej
{foo: '<"bar/>'}
Respondido por Quentin: Codifique la cadena JSON antes de ponerla en el atributo, según las convenciones habituales. Para PHP, use la función .
htmlentities()
EDITAR - Solución de ejemplo usando PHP y jQuery
Escribiendo el JSON en el atributo HTML:
<?php
$data = array(
'1' => 'test',
'foo' => '<"bar/>'
);
$json = json_encode($data);
?>
<a href="#" data-json="<?php echo htmlentities($json, ENT_QUOTES, 'UTF-8'); ?>">CLICK ME</a>
Recuperando el JSON usando jQuery:
$('a').click(function() {
// Read the contents of the attribute (returns a string)
var data = $(this).data('json');
// Parse the string back into a proper JSON object
var json = $.parseJSON($(this).data('json'));
// Object now available
console.log(json.foo);
});
data-json
que debe usar $(this).data('json')
, jQuery lo tiene cubierto en esa parte.