每次字符串化时,JSON.stringify都会转义双引号

use*_*975 21 javascript json

我将从Web服务中检索到的JSON对象存储到javascript中的对象.在许多地方,这会得到字符串化(这个obj会经过一些插件,它会对它进行格式化并存储并进行后续处理)并添加多个斜杠.我怎么能避免呢?

http://jsfiddle.net/MJDYv/2/

var obj = {"a":"b", "c":["1", "2", "3"]};
var s = "";
console.log(obj);
s = JSON.stringify(obj);
alert(s); // Proper String
s = JSON.stringify(s);
alert(s); // Extra slash added, Quotes are escaped
s = JSON.stringify(s);
alert(s); // Again quotes escaped or slash escaped but one more slash gets added
var obj2 = JSON.parse(s);
console.log(obj2); // Still a String with one less slash, not a JSON object !
Run Code Online (Sandbox Code Playgroud)

因此,在解析这个多字符串时,我最终会再次使用字符串.当试图像对象一样访问时它会崩溃.

我试图通过使用删除斜杠replace(/\\/g,"")但我以此结束:""{"a":"b","c":["1","2","3"]}""

Aln*_*tak 31

你期望发生什么?

JSON.stringify在调用已转换为JSON的数据时,它不会像"身份"函数那样运行.在设计上,它逃跑引号,反斜杠,等等.

您需要调用JSON.parse()与您调用的完全相同的次数JSON.stringify()来返回您放入的相同对象.

  • 多谢,伙计.你让我今天一整天都感觉很好. (2认同)

Aru*_*run 17

尝试这个:

s = {"a":"b", "c":["1", "2", "3"]}
JSON.stringify(JSON.stringify(s))
Run Code Online (Sandbox Code Playgroud)

给出输出为

'"{\"a\":\"b\",\"c\":[\"1\",\"2\",\"3\"]}"'
Run Code Online (Sandbox Code Playgroud)

  • 尝试:`console.log(JSON.stringify(JSON.stringify(s)))` (3认同)

Tom*_*rae 10

只需JSON.stringify()在要转换为JSON的数据上调用一次就可以避免这种情况.

  • 在你需要之前不要把它串起来.在那之前,只需将数据添加到javascript'result'对象. (6认同)

Emr*_*pcı 7

尝试

JSON.stringify(s).replace(/\\"/g, '"')
Run Code Online (Sandbox Code Playgroud)