38

我将从 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 !

因此,在解析这个多个字符串时,我再次得到一个字符串。当尝试像对象一样访问时,它会崩溃。

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

4

4 回答 4

43

你期望会发生什么?

JSON.stringify在已转换为 JSON 的数据上调用时,它不像“身份”函数。按照设计,它将转义引号、反斜杠等。

您需要调用与调用相同的JSON.parse()次数JSON.stringify()才能取回您放入的同一对象。

于 2013-05-12T13:36:56.450 回答
15

您只需JSON.stringify()对要转换为 JSON 的数据调用一次即可避免这种情况。

于 2013-05-12T14:22:17.627 回答
15

尝试

JSON.stringify(s).replace(/\\"/g, '"')
于 2018-04-04T09:04:38.683 回答
2

尝试这个:

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

给出输出为

'"{\"a\":\"b\",\"c\":[\"1\",\"2\",\"3\"]}"'
于 2021-10-01T10:19:41.743 回答