提问人:John 提问时间:6/10/2012 更新时间:6/18/2021 访问量:58601
JSON.stringify 无需转义
JSON.stringify escaping without need
问:
JSON.stringify 正在将我的 json 对象转换为以下字符串
{\“2003\”:{\“1\”:{\“2\”:[\“测试\”],\“3\”:[\“test2\”]}}}
当它不应该被逃脱时。结果应为下面引用的字符串
{“2003”:{“1”:{“2”:[“测试”],“3”:[“测试2”]}}}
而不是使用所有转义引号的一般替换,并删除可能位于输入中的引号。如何将 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.log
JSON.parse
评论
JSON.stringify