将JS对象转换为JSON字符串


Answers:


1922

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

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


5
下载此脚本以进行JSON.stringify(j);工作
AabinGunz 2011年

2
由于node使用相同的引擎
因此

26
这个答案是在IE9发布之前一年发布的,因此在撰写本文时,IE8确实是一个现代浏览器,或者至少它是最新的IE。
Andris 2015年

JSON.stringify不会转换嵌套对象。任何解决方案.. ??
Ritesh

9
如果您需要更具可读性的json字符串,则可以使用空格参数,例如var formattedJSON = JSON.stringify(j, null, 2);
Jacek Gzel,

110

随着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.

6
对于多一点清晰:replacer 可选的,所以如果你想还是用space你把ARG nullreplacer。如果您有兴趣使用此功能进行漂亮的打印,我发现此答案也很有用:stackoverflow.com/a/7220510/857209
Glenn Lawrence

34

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

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

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

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

23

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

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

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


感谢您添加反向过程。
David Lavieri'2

12

在angularJS中

angular.toJson(obj, pretty);

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

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

(默认值:2)


12

JSON.stringify(j, null, 4) 在需要美化的情况下也会为您提供美化的JSON

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



9

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


7

为此定义一个自定义,直到我们对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/


不会用引号将字符串转义,例如:“ a \” in a string”
alphakevin

1
该自定义代码非常不完整。不支持数组,对象和特殊字符。示例: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“}!
曼努埃尔·罗梅罗

7

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


5

易用...易于使用

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

谢谢


3

您可以像这样使用本机stringify函数

const j={ "name": "binchen" }

/** convert json to string */
const jsonString = JSON.stringify(j)

console.log(jsonString) // {"name":"binchen"}


3

如果要以字符串格式获取json属性值,请使用以下方法

var i = {"x":1}

var j = JSON.stringify(i.x);

var k = JSON.stringify(i);

console.log(j);

"1"

console.log(k);

'{"x":1}'

3

要在Node JS中进行调试,可以使用util.inspect()。与循环引用配合使用效果更好。

var util = require('util');
var j = {name: "binchen"};
console.log(util.inspect(j));

3

现有的JSON替换对我来说太多了,因此我编写了自己的函数。这似乎可行,但是我可能错过了几个极端情况(在我的项目中不会发生)。并且可能不适用于任何预先存在的对象,仅适用于自制数据。

function simpleJSONstringify(obj) {
    var prop, str, val,
        isArray = obj instanceof Array;

    if (typeof obj !== "object") return false;

    str = isArray ? "[" : "{";

    function quote(str) {
        if (typeof str !== "string") str = str.toString();
        return str.match(/^\".*\"$/) ? str : '"' + str.replace(/"/g, '\\"') + '"'
    }

    for (prop in obj) {
        if (!isArray) {
            // quote property
            str += quote(prop) + ": ";
        }

        // quote value
        val = obj[prop];
        str += typeof val === "object" ? simpleJSONstringify(val) : quote(val);
        str += ", ";
    }

    // Remove last colon, close bracket
    str = str.substr(0, str.length - 2)  + ( isArray ? "]" : "}" );

    return str;
}

2
So in order to convert a js object to JSON String: 

将对象转换为字符串的简单语法是

JSON.stringify(value)

完整语法为: JSON.stringify(value [,replacer [,space]])

让我们看一些简单的例子。请注意,如果需要,整个字符串将用双引号引起来,并且字符串中的所有数据都将转义。

JSON.stringify("foo bar"); // ""foo bar""
JSON.stringify(["foo", "bar"]); // "["foo","bar"]"
JSON.stringify({}); // '{}'
JSON.stringify({'foo':true, 'baz':false}); /* " 
{"foo":true,"baz":false}" */



const obj = { "property1":"value1", "property2":"value2"};
const JSON_response = JSON.stringify(obj);
console.log(JSON_response);/*"{ "property1":"value1", 
"property2":"value2"}"*/

2
如果您可以提供代码的简短说明,那就太好了。
jonny

这不能为问题提供答案。一旦您拥有足够的声誉,您就可以在任何帖子中发表评论;相反,请提供不需要问询者澄清的答案。- 评论
拉斐尔

我已经编辑了答案,非常感谢您指出@Rafael和@ jonny。
拉胡尔(Rahul Choudhary)

1

只是JSON.stringify用来进行这种转换-但是请记住,具有undefined值的字段不会包含在json中

var j={"name":"binchen", "remember":undefined, "age": null };

var s=JSON.stringify(j);

console.log(s);

remember输出json 字段“消失”


你刚刚救了我的一天。我无法保存对象。具有未定义值的字段将不包含在json中的键解决了我的问题!
Mohammad Ghonchesefidi

0

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

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

要将此字符串转换回json对象,可以使用JSON.parse()方法。


0

采用 JSON.stringify(param1, param2, param3);

什么是: -

param1->转换为JSON的值

param2->函数以您自己的方式进行字符串化。另外,它还可以作为白名单,最终JSON中需要包含这些对象。

param3-> Number数据类型,指示要添加的空格数。允许的上限为10。


0

转换str => obj

const onePlusStr ='[{“ brand”:“ oneplus”},{“ model”:“ 7T”}]'';

const onePLusObj = JSON.parse(onePlusStr);

转换obj => str

const onePLusObjToStr = JSON.stringify(onePlusStr);

JS中的JSON解析引用:
JSON.parse():单击
JSON.stringify():单击


您能否提供更多信息?参考文献等
Nodejs-nerd

JS中的JSON解析参考:JSON.parse():w3schools.com/js/js_json_parse.asp JSON.stringify():w3schools.com/js/js_json_stringify.asp
yash

谢谢,您能编辑您的答案以包括这个
吗?

0

非常易于使用的方法,但不要在发行版中使用(因为可能存在兼容性问题)。

非常适合您身边的测试。

Object.prototype.toSource()

//Usage:
obj.toSource();

0

使用字符串化功能

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

var j_json = JSON.stringify(j);

console.log("j in json object format :", j_json);

编码愉快!!!


0
//use JSON.stringify({})

const stringified = JSON.stringify({})//以字符串格式传递要转换的对象


-1

用这个,

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

-24

如果您有json字符串,并且没有用[]包裹,请先将其包裹起来

var str = '{"city": "Tampa", "state": "Florida"}, {"city": "Charlotte", "state": "North Carolina"}';
str = '[' + str + ']';
var jsonobj = $.parseJSON(str);

要么

var jsonobj = eval('(' + str + ')');
console.log(jsonobj);

OP正在尝试另辟way径。您的问题回答了相反的情况,即他有一个JSON字符串并想将其作为对象。
Joshua Snider 2015年

1
您已完成反问的事情..您应该使用JSON.stringfy()函数
Hardik Patel,
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.