jQuery.stringify() utility
/** | |
* converted stringify() to jQuery plugin. | |
* serializes a simple object to a JSON formatted string. | |
* Note: stringify() is different from jQuery.serialize() which URLEncodes form elements | |
* UPDATES: | |
* Added a fix to skip over Object.prototype members added by the prototype.js library | |
* USAGE: | |
* jQuery.ajax({ | |
* data : {serialized_object : jQuery.stringify (JSON_Object)}, | |
* success : function (data) { | |
* | |
* } | |
* }); | |
* | |
* CREDITS: http://blogs.sitepointstatic.com/examples/tech/json-serialization/json-serialization.js | |
*/ | |
jQuery.extend({ | |
stringify : function stringify(obj) { | |
var t = typeof (obj); | |
if (t != "object" || obj === null) { | |
// simple data type | |
if (t == "string") obj = '"' + obj + '"'; | |
return String(obj); | |
} else { | |
// recurse array or object | |
var n, v, json = [], arr = (obj && obj.constructor == Array); | |
for (n in obj) { | |
v = obj[n]; | |
t = typeof(v); | |
if (obj.hasOwnProperty(n)) { | |
if (t == "string") v = '"' + v + '"'; else if (t == "object" && v !== null) v = jQuery.stringify(v); | |
json.push((arr ? "" : '"' + n + '":') + String(v)); | |
} | |
} | |
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); | |
} | |
} | |
}); |
This comment has been minimized.
This comment has been minimized.
Thanks, to both of you! Super handy! |
This comment has been minimized.
This comment has been minimized.
I'm about to use this.. RIGHT NOW! :D THANKS! |
This comment has been minimized.
This comment has been minimized.
Good. |
This comment has been minimized.
This comment has been minimized.
Thanks both of you !!! Very good help. |
This comment has been minimized.
This comment has been minimized.
Doesn't escape double qoutes (") :(((. So JSON.stringify( { Password: 'ab"c' } ) produces good JSON string: '{"Password":"ab"c"}, see also: http://code.google.com/p/jquery-json/source/browse/trunk/src/jquery.json.js |
This comment has been minimized.
This comment has been minimized.
escape double qoutes. :))) jQuery.extend({
stringify : function stringify(obj) {
if ("JSON" in window) {
return JSON.stringify(obj);
}
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = '"' + obj.replace(/"/g,'\\\"') + '"';
return String(obj);
} else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n];
t = typeof(v);
if (obj.hasOwnProperty(n)) {
if (t == "string") {
v = '"' + v.replace(/"/g,'\\\"') + '"';
} else if (t == "object" && v !== null){
v = jQuery.stringify(v);
}
json.push((arr ? "" : '"' + n + '":') + String(v));
}
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
}
}); |
This comment has been minimized.
This comment has been minimized.
Not handy, but just replace with json2.js for beautiful print. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Hint:
You could optimize this method to use the native JSON.stringify method, so that your recursive method would only be executed on IE6/7, like this:
This way, your code would only be executed on older browsers, working as a fallback :)