I was reading an interesting article on about JSON serialization and decided to wrap it up in as a jQuery extension to include in my development library. Most of the code has been borrowed from the original implementation, I’ve just jQueryifed things. So here it is:
jQuery(function($) { $.extend({ serializeJSON: function(obj) { var t = typeof(obj); if(t != "object" || obj === null) { // simple data type if(t == "string") obj = '"' + obj + '"'; return String(obj); } else { // array or object var json = [], arr = (obj && obj.constructor == Array); $.each(obj, function(k, v) { t = typeof(v); if(t == "string") v = '"' + v + '"'; else if (t == "object" & v !== null) v = $.serializeJSON(v) json.push((arr ? "" : '"' + k + '":') + String(v)); }); return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); } } }); }); |
And to use it, you would do something like
$(document).ready(function () { var obj1 = { b1: true, s1: "text string", n1: 12345, n2: null, n3: undefined, a1: [1, 1, 2, 3, 5, 8, [13, 21, 34]], o1: { a: [3, 2, 1], b: { c: 42, d: [3.14, 1.618] } } }; alert($.serializeJSON(obj1)); }); |
Thanks.
Thanks for sharing – thought I would point out that the JSON serializer above causes an infinite loop to occur.
I’ll take a minute to debug it this weekend if I can get to it.
Cheers!
Thank you!
I’ve noticed though that this doesn’t escape double quotes in object values.
I added the following on both the t=string lines.
v.replace(/"/g, '\\"')