我有一个JavaScript字符串,其中的键值是数组的字符串表示形式:
{
"a": "[\"b\",\"c\"]"
}
jsonlint.com说这是有效的。
JSON.parse('{"a":"[\"b\",\"c\"]"}');
引发错误(位置8处的意外令牌b)。这似乎是关于包含转义引号的引号-但我的字符串似乎符合www.json.org的标准。
// set up an object with this pattern
var o = {};
o['a'] = "[\"b\",\"c\"]";
console.dir(o.a); // -> "[\"b\",\"c\"]"
// look at the JSON string version of this object
var j = JSON.stringify(o);
console.dir(j); // -> {"a":"[\"b\",\"c\"]"}
// set up this inside a string and try to parse it
var k = '{"a":"[\"b\",\"c\"]"}';
var l = JSON.parse(k); // -> error
谁是正确的? jsonlint.com或JSON.parse()吗?
答案 0 :(得分:4)
使用javascript编写字符串时,您需要转义\
字符,否则它将被解释。
const ret = JSON.parse('{"a":"[\\"b\\",\\"c\\"]"}');
console.log(ret);
答案 1 :(得分:3)
作为一种选择,使用花哨的现代工具,直到我在一分钟前用Google搜索它之前,我还不知道它存在。
const ret = JSON.parse(String.raw`{"a":"[\"b\",\"c\"]"}`);
console.log(ret);
答案 2 :(得分:1)
您也需要转义反斜杠:
var k = '{"a":"[\\"b\\",\\"c\\"]"}';
var l = JSON.parse(k);
console.log(l);
您还可以使用String.raw
标签功能(仅适用于ES6):
var k = String.raw`{"a":"[\"b\",\"c\"]"}`;
var l = JSON.parse(k);
console.log(l);