31

JSON.stringify 正在将我的 json 对象转换为以下字符串

{\"2003\":{\"1\":{\"2\":[\"test\"],\"3\":[\"test2\"]}}}

当它不应该逃脱时。结果应该是下面引用的字符串

{"2003":{"1":{"2":["test"],"3":["test2"]}}}

而不是使用所有转义引号的一般替换并删除可能在输入中的引号。如何设置 JSON.stringify 不双重转义变量?

4

2 回答 2

48

您正在对字符串进行字符串化,而不是对象:

var str = '{"2003":{"1":{"2":["test"],"3":["test2"]}}}';
var obj = {"2003":{"1":{"2":["test"],"3":["test2"]}}};

console.log( JSON.stringify(str) );  // {\"2003\":{\"1\":{\"2\":[\"test\"],\"3\":[\"test2\"]}}} 
console.log( JSON.stringify(obj) );  // {"2003":{"1":{"2":["test"],"3":["test2"]}}} 
于 2012-06-10T07:52:45.957 回答
7

在浏览器的控制台中尝试这两个示例:

let obj = {2003:{1:{2:["test"],3:["test2"]}}};
JSON.stringify(obj);

-> "{\"2003\":{\"1\":{\"2\":[\"test\"],\"3\":[\"test2\"]}}}"

let obj = {2003:{1:{2:["test"],3:["test2"]}}};
console.log(JSON.stringify(obj));

-> {"2003":{"1":{"2":["test"],"3":["test2"]}}}

在这两种情况下,返回的字符串JSON.stringify都是有效的

在第一种情况下,您将“原始”字符串打印到以双引号开头和结尾的控制台,并且所有嵌套的双引号都需要转义(\"而不是")。JSON 验证器会将此字符串标记为格式错误的 JSON,但仍可使用JSON.parse

在第二种情况下,您将字符串“解释”打印为 JSON by console.log。JSON 验证器会将其标记为有效 JSON,但无法解析,JSON.parse因为它不是字符串(周围没有引号)

于 2021-06-18T08:06:42.950 回答