jQuery JSON to string?
JavascriptJqueryJsonJavascript Problem Overview
Instead of going JSON a json string and using $.parseJSON, I need to take my object and store it in a variable as string representing JSON.
(A library I'm dealing with expects a malformed JSON type so I need to mess around with it to get it to work.)
What's the best way to do this?
Javascript Solutions
Solution 1 - Javascript
Edit: You should use the json2.js library from Douglas Crockford instead of implementing the code below. It provides some extra features and better/older browser support.
Grab the json2.js file from: https://github.com/douglascrockford/JSON-js
// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (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 (t == "string") v = '"'+v+'"';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : '"' + n + '":') + String(v));
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};
var tmp = {one: 1, two: "2"};
JSON.stringify(tmp); // '{"one":1,"two":"2"}'
Code from: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/
Solution 2 - Javascript
I use
$.param(jsonObj)
which gets me the string.
Solution 3 - Javascript
Most browsers have a native JSON
object these days, which includes parse
and stringify
methods. So just try JSON.stringify({})
and see if you get "{}"
. You can even pass in parameters to filter out keys or to do pretty-printing, e.g. JSON.stringify({a:1,b:2}, null, 2)
puts a newline and 2 spaces in front of each key.
JSON.stringify({a:1,b:2}, null, 2)
gives
"{\n \"a\": 1,\n \"b\": 2\n}"
which prints as
{
"a": 1,
"b": 2
}
As for the messing around part of your question, use the second parameter. From http://www.javascriptkit.com/jsref/json.shtml :
> The replacer parameter can either be a function or an array of > String/Numbers. It steps through each member within the JSON object to > let you decide what value each member should be changed to. As a > function it can return: > > - A number, string, or Boolean, which replaces the property's original value with the returned one. > - An object, which is serialized then returned. Object methods or functions are not allowed, and are removed instead. > - Null, which causes the property to be removed. > > As an array, the values defined inside it corresponds to the names of > the properties inside the JSON object that should be retained when > converted into a JSON object.
Solution 4 - Javascript
The best way I have found is to use [jQuery JSON][1]
[1]: http://code.google.com/p/jquery-json/ "jQuery JSON"
Solution 5 - Javascript
You could parse the JSON to an object, then create your malformed JSON from the ajavscript object. This may not be the best performance-wise, tho.
Otherwise, if you only need to make very small changes to the string, just treat it as a string, and mangle it using standard javascript.