Preciso colocar um objeto JSON em um atributo em um elemento HTML.
O HTML não precisa ser validado.Respondido por Quentin: Armazene o JSON em um
data-*
atributo , que é HTML5 válido.O objeto JSON pode ter qualquer tamanho - ou seja, enorme
Respondido por Maiku Mori: O limite para um atributo HTML é potencialmente de 65536 caracteres .
E se o JSON contiver caracteres especiais? por exemplo
{foo: '<"bar/>'}
Respondido por Quentin: Codifique a string JSON antes de colocá-la no atributo, conforme as convenções usuais. Para PHP, use a função .
htmlentities()
EDIT - Exemplo de solução usando PHP e jQuery
Escrevendo o JSON no 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 o 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
você deve usar $(this).data('json')
o jQuery para ajudá-lo nessa parte.