将JS对象转换为JSON字符串

Bin*_*hen 1199 javascript string json object

如果我用JS定义了一个对象:

var j={"name":"binchen"};
Run Code Online (Sandbox Code Playgroud)

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

'{"name":"binchen"}'
Run Code Online (Sandbox Code Playgroud)

And*_*ris 1862

所有当前的浏览器都内置了原生JSON支持.因此,只要您不处理像IE6/7这样的史前浏览器,您就可以轻松地执行此操作:

var j={"name":"binchen"};
JSON.stringify(j); // '{"name":"binchen"}'
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是在IE9发布前一年发布的,因此在编写IE8时确实是一个现代浏览器,或者至少它是最新的IE浏览器. (25认同)
  • 如果您需要更具可读性的json字符串,则可以使用空间参数,例如`var formattedJSON = JSON.stringify(j,null,2);` (7认同)
  • 下载[this script](https://github.com/douglascrockford/JSON-js)以便`JSON.stringify(j);`工作 (5认同)
  • 在nodejs上工作,因为节点使用相同的引擎 (2认同)

Ign*_*ams 104

随着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.
Run Code Online (Sandbox Code Playgroud)

  • 为了更清晰一些:`replacer` _is_可选,所以如果你仍然想要使用`space` arg,你可以为`replacer`添加`null`.如果您有兴趣使用此功能进行漂亮的打印,我发现这个答案也很有用:http://stackoverflow.com/a/7220510/857209 (6认同)

Sar*_*raz 30

查看更新/更好的方式:

2008年5月17日更新:添加到toObject方法的小型消毒剂.现在,如果字符串中发现任何恶意代码,toObject()将不会eval()该字符串.为了更加安全:不要将includeFunctions标志设置为true.

JSON概念之父Douglas Crockford编写了JavaScript的第一个字符串之一.后来,Trim Path的Steve Yen编写了一个很好的改进版本,我已经使用了一段时间.这是我对Steve的版本的修改,我想与你分享.基本上他们源于我想要制作弦乐器:

__PRE__


小智 22

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

var j={"name":"binchen"};
JSON.stringify(j)
Run Code Online (Sandbox Code Playgroud)

对于反向过程,您可以使用JSON.parse()方法将JSON String转换为JSON Object.


Naz*_*lam 10

在angularJS

angular.toJson(obj, pretty);
Run Code Online (Sandbox Code Playgroud)

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

pretty(可选):
如果设置为true,则JSON输出将包含换行符和空格.如果设置为整数,则JSON输出将包含每个缩进的许多空格.

(默认:2)


Vig*_*gan 10

JSON.stringify(j, null, 4) 如果您还需要美化,它会给你美化JSON


Ari*_*bib 9

如果你正在使用AngularJS,'json'过滤器应该这样做:

<span>{{someObject | json}}</span>
Run Code Online (Sandbox Code Playgroud)


Dul*_*sta 8

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

转换是Object to String

JSON.parse 将一串JSON文本转换为Javascript对象.

转换是String to Object

var j={"name":"binchen"};
Run Code Online (Sandbox Code Playgroud)

使它成为一个JSON字符串可以使用.

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

JSON.stringify({"name":"binchen"});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅以下链接.

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


小智 6

为此定义了一个自定义,直到我们对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);
Run Code Online (Sandbox Code Playgroud)

OUTPUT

{"name":"binchen","class":"awesome"}
Run Code Online (Sandbox Code Playgroud)

现场 http://jsfiddle.net/mailmerohit5/y78zum6v/

  • 该自定义代码非常不完整。不支持数组、对象和特殊字符。示例:json {"arr":["1", "2", "3"],"obj":{"a":"b"},"key\"with\\special}chars":" value"} 将输出 {"arr":"1,2,3","obj":"[object Object]","key"with\special}chars":"value"} 那是错误的! (2认同)

Sam*_*Sam 6

我遇到了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 += "]}";
Run Code Online (Sandbox Code Playgroud)

MyObjectStringify会给你你的字符串表示(就像在这个线程中的其他时间一样),除非你有一个大对象,这也应该工作 - 只要确保你构建它以满足你的需要 - 我需要它的名字而不是数组


小智 6

Woking... 易于使用

$("form").submit(function(evt){
  evt.preventDefault();
  var formData = $("form").serializeArray(); // Create array of object
  var jsonConvert = JSON.stringify(formData);  // Convert to json
});
Run Code Online (Sandbox Code Playgroud)

谢谢