Beste Möglichkeit, JSON in einem HTML-Attribut zu speichern?

Ich ein JSON-Objekt in einem Attribut auf ein HTML-element.

  1. Das HTML nicht validieren.

    Beantwortet von Quentin: Speichern von JSON in ein data-* - Attribut, die ist gültig HTML5.

  2. Das JSON-Objekt kann jede mögliche Größe, d.h. große

    Beantwortet von Maiku Mori: Die Grenze für ein HTML-Attribut ist potentiell 65536 Zeichen.

  3. Was ist, wenn die JSON enthält Sonderzeichen? z.B. {foo: '<"bar/>'}

    Beantwortet von Quentin: Kodieren von JSON-Strings, der vor dem setzen es in das Attribut, wie er gemäß den üblichen Konventionen. Für PHP verwenden Sie die htmlentities() Funktion.


BEARBEITEN - Beispiel-Lösung mittels PHP und jQuery

Schreiben der JSON-in die HTML-Attribut:

<?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>

Abrufen von JSON mit 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);

});
Kommentar zu dem Problem
Sie sollten wahrscheinlich erklären, warum und bitten für die andere Lösung, da bin ich mir ziemlich sicher, dass dies nicht der beste. Sie können prob Daten verwenden-etwas, das Eigenschaften, aber ich bin mir nicht sicher, ob Sie halten kann "riesige" Menge an text. Für Besondere chars können Sie einfach codieren (escape() und unescape()) text. Kommentarautor: Maiku Mori
Ja limit von 65536 chars (stackoverflow.com/questions/2752457/...) Kommentarautor: Maiku Mori
Btw, wenn Ihr Attribut ist mit dem Namen data-json solltest du $(this).data('json'), das jQuery-hat Sie bedeckt auf dem Teil. Kommentarautor: Ciantic
Nur eine Anmerkung, die Benennung der Daten-suffix zu json ist nicht erforderlich. Wenn Sie gültiges json-Daten-custom_attribute es funktioniert gut mit jQuery. Kommentarautor: Garet Claborn
bitte korrigieren Sie die Klammern Sequenz )}; => }); Kommentarautor: MotsManish

InformationsquelleAutor der Frage BadHorsie | 2011-09-06

Schreibe einen Kommentar