将 JS 对象转换为 JSON 字符串

如果我用以下方法在 JS 中定义了一个对象:

var j={"name":"binchen"};

如何将对象转换为 JSON?输出字符串应为:

'{"name":"binchen"}'

答案

当前所有的浏览器都内置了本机 JSON 支持。因此,只要您不使用 IE6 / 7 之类的史前浏览器,就可以像这样轻松地做到这一点:

var j={"name":"binchen"};
JSON.stringify(j); // '{"name":"binchen"}'

随着JSON.stringify()中发现的json2.js或大部分现代浏览器本地。

JSON.stringify(value, replacer, space)
        value       any JavaScript value, usually an object or array.

       replacer    an optional parameter that determines how object
                    values are stringified for objects. It can be a
                    function or an array of strings.

       space       an optional parameter that specifies the indentation
                    of nested structures. If it is omitted, the text will
                    be packed without extra whitespace. If it is a number,
                    it will specify the number of spaces to indent at each
                    level. If it is a string (such as '\t' or ' '),
                    it contains the characters used to indent at each level.

       This method produces a JSON text from a JavaScript value.

查看 Thomas Frank 更新 / 更好的方式:

2008 年 5 月 17 日更新:小型消毒剂已添加到 toObject 方法中。 现在,如果 toObject()在字符串中发现任何恶意代码,将不再对字符串进行 eval()。为了进一步提高安全性:请不要将 includeFunctions 标志设置为 true。

JSON 概念的父亲 Douglas Crockford 编写了 JavaScript 的首批字符串化器之一。后来,Trim Path 的 Steve Yen 写了一个不错的改进版本,我使用了一段时间。我想与您分享这是我对史蒂夫版本的更改。基本上,它们源于我希望做成串器的意图:

  • 处理和恢复循环引用
  • 包括功能 / 方法的 JavaScript 代码(作为选项)
  • 如果需要,从 Object.prototype 中排除对象成员。

您可以使用JSON.stringify()方法将 JSON 对象转换为 String。

var j={"name":"binchen"};
JSON.stringify(j)

对于反向过程,可以使用JSON.parse()方法将 JSON 字符串转换为 JSON 对象。

在 angularJS 中

angular.toJson(obj, pretty);

obj:要序列化为 JSON 的输入。

漂亮(可选):
如果设置为 true,则 JSON 输出将包含换行符和空格。如果设置为整数,则 JSON 输出每个缩进将包含那么多空格。

(默认值:2)

JSON.stringify(j, null, 4)会为您提供美化的 JSON,以防您还需要美化

第二个参数是 replacer。它可用作筛选器,您可以在进行字符串化时过滤掉某些键值。如果设置为 null,它将返回所有键值对

如果您使用的是 AngularJS,则 “json” 过滤器应执行以下操作:

<span>{{someObject | json}}</span>

JSON.stringify将 Javascript 对象转换为 JSON 文本,并将该 JSON 文本存储在字符串中。

转换是对象到字符串

JSON.parse将 JSON 文本字符串转换为 Javascript 对象。

转换是字符串到对象

var j={"name":"binchen"};

使其可以使用以下 JSON 字符串。

JSON.stringify({"key":"value"});

JSON.stringify({"name":"binchen"});

有关更多信息,您可以参考下面的链接。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

为此定义一个自定义,直到我们对 stringify 方法感到奇怪

var j={"name":"binchen","class":"awesome"};
var dq='"';
var json="{";
var last=Object.keys(j).length;
var count=0;
for(x in j)
{
json += dq+x+dq+":"+dq+j[x]+dq;
count++;
if(count<last)
   json +=",";
}
json+="}";
document.write(json);

输出值

{"name":"binchen","class":"awesome"}

直播 http://jsfiddle.net/mailmerohit5/y78zum6v/

我遇到了 stringify 内存不足的问题,其他解决方案似乎不起作用(至少我无法使它们正常工作),那时我偶然发现了该线程。多亏了Rohit Kumar,我才遍历非常大的 JSON 对象来阻止它崩溃

var j = MyObject;
var myObjectStringify = "{\"MyObject\":[";
var last = j.length
var count = 0;
for (x in j) {
    MyObjectStringify += JSON.stringify(j[x]);
    count++;
    if (count < last)
        MyObjectStringify += ",";
}
MyObjectStringify += "]}";

MyObjectStringify 会为您提供字符串表示形式(就像在该线程中其他时候所提到的那样),除非您有一个大对象,这也应该起作用 - 只需确保将其构建为适合您的需求 - 我需要它的名称比数组大