JSON.stringify 无需转义

JSON.stringify escaping without need

提问人:John 提问时间:6/10/2012 更新时间:6/18/2021 访问量:58601

问:

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

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

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

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

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

JavaScript jQuery JSON 序列化

评论

0赞 Gumbo 6/10/2012
您的对象和生成的 JSON 是如何构造的?
1赞 gdoron 6/10/2012
javascript 对象是什么样子的?你正在做某事,问题不在JSON.stringify

答:

50赞 Engineer 6/10/2012 #1

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

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赞 John 6/10/2012
发现问题,转义是由WordPress的esc_attr()完成的
0赞 wzso 7/17/2017
@Engineer,我不知道为什么这不能很好地工作。你可以帮我吗?我问了一个问题,我在哪里粘贴了我的代码和所有内容。谢谢。stackoverflow.com/questions/45139583/......
9赞 halt00 10/5/2017
这是行不通的。将您的代码复制并粘贴到 jsbin.com 中,您就会得到这个。“\”{\\“2003\\”:{\\“1\\”:{\\“2\\”:[\\“test\\”],\\“3\\”:[\\“test2\\”]}}}\“” “{\”2003\“:{\”1\“:{\”2\“:[\”test\“],\”3\“:[\”test2\“]}}}”
5赞 nthaxis 10/27/2018
仍在获取 jsbin 中对象的转义字符
7赞 OdkoPP 6/18/2021 #2

在浏览器控制台中尝试以下两个示例:

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

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