jQuery JSON 到字符串?

IT技术 javascript jquery json
2021-02-16 07:10:43

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

(我正在处理的一个库需要一个格式错误的 JSON 类型,所以我需要弄乱它才能让它工作。)

做到这一点的最佳方法是什么?

5个回答

编辑:您应该使用 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/

对于那些寻找现代答案的人:JSON.stringify(); 在所有浏览器(桌面和移动)中实现:developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
2021-04-17 07:10:43
我会推荐json2.js库而不是这个函数,因为它不能正确处理某些类型,比如包含的属性undefined、函数(不是有效的 JSON 值)、布尔对象(例如new Boolean(true);),或者NaN哪些应该被替换withnull等...也不支持额外的可选参数、replacer函数和spaces缩进数,这些在标准中都有完整的描述
2021-05-02 07:10:43
2021-05-08 07:10:43
现在大多数浏览器都有一个原生的 JSON 对象,其中包括 parse 和 stringify 方法。因此,只需尝试JSON.stringify({})看看是否"{}"无需包含上述代码即可。您甚至可以传入参数来过滤键或进行漂亮的打印,例如JSON.stringify({a:1,b:2}, null, 2)在每个键前放置一个换行符和 2 个空格。
2021-05-15 07:10:43

我用

$.param(jsonObj)

这让我得到了字符串。

但是这个小代码正在完成问题请求的所有标题:P
2021-04-16 07:10:43
但这不会创建 JSON(这就是问题所在)。
2021-05-01 07:10:43

如今,大多数浏览器都有一个本机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对象时应该保留。

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

@user01 但 jquery 不包括这样做的方法(至少在我写这个回复时没有,不确定现在是否有)
2021-04-22 07:10:43
@DavidReynolds:当然是的,我明白:) 我无意冒犯你,只是将其评论为问题的解决方案:)
2021-04-26 07:10:43
因为它是一个 jquery插件而不是 jquery 直接提供的
2021-05-15 07:10:43

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

否则,如果您只需要对字符串进行非常小的更改,只需将其视为字符串,并使用标准 javascript 对其进行处理。