jquery json到字符串?

Inc*_*ito 79 javascript jquery json

我不需要使用json字符串并使用$ .parseJSON,而是将对象存储在变量中,并将其存储为表示json的字符串.

(我正在处理的库需要格式错误的json类型,所以我需要弄乱它以使其工作.)

最好的方法是什么?

Ini*_*sdr 84

编辑:你应该使用道格拉斯克罗克福德的json2.js库,而不是实现下面的代码.它提供了一些额外的功能和更好/更旧的浏览器支持.

从以下网址获取json2.js文件: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"}'
Run Code Online (Sandbox Code Playgroud)

代码来自:http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/

  • 我建议使用[json2.js](http://www.json.org/json2.js)库来代替这个函数,因为它没有正确处理某些类型,比如包含`undefined`,functions的属性,(它们不是有效的JSON值),布尔对象(例如`new Boolean(true);`),或者应该用`null`等替换的`NaN` ...它也不支持附加的可选参数,'replacer`函数和缩进的`spaces`数字,在标准中[完全描述](http://ecma262-5.com/ELS5_HTML.htm#Section_15.12.3). (23认同)
  • 现在大多数浏览器都有一个本机JSON对象,其中包括parse和stringify方法.所以只需尝试`JSON.stringify({})`并查看是否得到``{}'`而不需要包含上面的代码.您甚至可以传入参数来过滤掉键或进行漂亮的打印,例如`JSON.stringify({a:1,b:2},null,2)`在每个键的前面放置换行符和2个空格. (5认同)
  • 我想也许json2链接应该是:https://github.com/douglascrockford/JSON-js/blob/master/json2.js (3认同)
  • 为什么这个标有43+?这是部分正确的,因为@CMS描述.. (2认同)

小智 38

我用

$.param(jsonObj)
Run Code Online (Sandbox Code Playgroud)

这让我得到了字符串.

  • 但这个小代码正在完成问题请求的所有标题:P (22认同)
  • 但这不会创建JSON(这就是问题). (8认同)

Ale*_*fee 35

目前大多数浏览器都有本机JSON对象,其中包括parsestringify方法.所以试着JSON.stringify({})看看你是否得到了"{}".您甚至可以传入参数来过滤掉键或进行漂亮的打印,例如JSON.stringify({a:1,b:2}, null, 2)在每个键的前面放置换行符和2个空格.

JSON.stringify({a:1,b:2}, null, 2)
Run Code Online (Sandbox Code Playgroud)

"{\n  \"a\": 1,\n  \"b\": 2\n}"
Run Code Online (Sandbox Code Playgroud)

打印为

{
  "a": 1,
  "b": 2
}
Run Code Online (Sandbox Code Playgroud)

至于弄乱你问题的一部分,请使用第二个参数.来自http://www.javascriptkit.com/jsref/json.shtml:

replacer参数可以是函数或String/Numbers数组.它逐步执行JSON对象中的每个成员,以便您决定应将每个成员更改为哪个值.作为一个功能,它可以返回:

  • 数字,字符串或布尔值,用返回的属性替换属性的原始值.
  • 一个对象,然后被序列化然后返回.不允许使用对象方法或函数,而是将其删除.
  • Null,导致属性被删除.

作为一个数组,它内部定义的值对应于JSON对象中的属性名称,这些属性在转换为JSON对象时应该保留.


Dav*_*lds 10

我发现的最好方法是使用jQuery JSON