jQuery的JSON字符串?


79

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

(我正在处理的库期望使用格式错误的json类型,因此我需要弄乱它才能使其正常工作。)

最好的方法是什么?



哪个库需要格式错误的JSON字符串?:/
Marcel Korpel 2010年

Stanford JavaScript密码库输出并解析格式错误的JSON,此错误目前已解决。
隐身

Answers:


84

编辑:您应该使用Douglas Crockford的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"}'

来自以下网址的代码:http//www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/


23
我建议使用json2.js库而不是此函数,因为它无法正确处理某些类型,例如包含undefined,函数(不是有效的JSON值)的属性,布尔对象(例如new Boolean(true);)或NaN应替换的属性与null,等等。它也不支持其他可选参数,replacer函数和spaces缩进编号,这些在标准中已作了详细说明。
Christian C.Salvadó10年


5
如今,大多数浏览器都具有本机JSON对象,其中包括解析和字符串化方法。因此,只需尝试一下JSON.stringify({}),看看是否"{}"不需要添加上面的代码即可。您甚至可以传入参数以过滤出键或进行漂亮的打印,例如JSON.stringify({a:1,b:2}, null, 2)在每个键前面放置一个换行符和2个空格。
AlexChaffee 2012年

对于那些正在寻找现代答案的人:JSON.stringify(); 在所有实施的浏览器(桌面和移动):developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
巴勃罗·马丁内斯


35

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

JSON.stringify({a:1,b:2}, null, 2)

"{\n  \"a\": 1,\n  \"b\": 2\n}"

打印为

{
  "a": 1,
  "b": 2
}

至于问题的一部分,请使用第二个参数。从http://www.javascriptkit.com/jsref/json.shtml

replacer参数可以是函数或字符串/数字数组。它逐步遍历JSON对象中的每个成员,以使您确定每个成员应更改为的值。作为函数,它可以返回:

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

作为数组,其内部定义的值对应于JSON对象内部的属性名称,当转换为JSON对象时应保留这些属性的名称。


10

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


1
因为它是一个jquery插件,而不是jquery直接提供的东西
Rajat Gupta

@ user01,但jquery不包含执行此操作的方法(至少当我写此回复时,它没有,不确定现在是否这样做)
David Reynolds 2013年

@DavidReynolds:是的,我当然知道:)我不打算向您提出任何冒犯,只是对此发表评论,以解决问题:)
Rajat Gupta

0

您可以将JSON解析为一个对象,然后从ajavscript对象创建格式错误的JSON。可能这不是最佳的性能。

否则,如果您只需要对字符串进行很小的更改,则只需将其视为字符串,然后使用标准javascript进行处理即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.