JSON.stringify无需转义

时间:2012-06-10 07:47:24

标签: javascript jquery json serialization

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

  

{\ “2003 \”:{\ “1 \”:{\ “2 \”:[\ “测试\”],\ “3 \”:[\ “TEST2 \”]}}}

什么时候不应该逃脱。结果应该是下面引用的字符串

  

{ “2003”:{ “1”:{ “2”:[ “测试”], “3”:[ “TEST2”]}}}

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

2 个答案:

答案 0 :(得分:34)

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

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"]}}} 

答案 1 :(得分:1)

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

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 返回的字符串都是有效的

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

进行解析

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