Store JSON object in data attribute in HTML jQuery
This is how it worked for me.
Object
var my_object ={"Super Hero":["Iron Man", "Super Man"]};
Set
Encode the stringified object with encodeURIComponent() and set as attribute:
var data_str = encodeURIComponent(JSON.stringify(my_object));
$("div#mydiv").attr("data-hero",data-str);
Get
To get the value as an object, parse the decoded, with decodeURIComponent(), attribute value:
var data_str = $("div#mydiv").attr("data-hero");
var my_object = JSON.parse(decodeURIComponent(data_str));
instead of embedding it in the text just use $('#myElement').data('key',jsonObject);
it won't actually be stored in the html, but if you're using jquery.data, all that is abstracted anyway.
To get the JSON back don't parse it, just call:
var getBackMyJSON = $('#myElement').data('key');
If you are getting [Object Object]
instead of direct JSON, just access your JSON by the data key:
var getBackMyJSON = $('#myElement').data('key').key;
Actually, your last example:
<div data-foobar='{"foo":"bar"}'></div>
seems to be working well (see http://jsfiddle.net/GlauberRocha/Q6kKU/).
The nice thing is that the string in the data- attribute is automatically converted to a JavaScript object. I don't see any drawback in this approach, on the contrary! One attribute is sufficient to store a whole set of data, ready to use in JavaScript through object properties.
(Note: for the data- attributes to be automatically given the type Object rather than String, you must be careful to write valid JSON, in particular to enclose the key names in double quotes).