哪个正确-jsonlint或JSON.parse?

时间:2019-06-13 09:12:02

标签: javascript json string

我有一个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()吗?

3 个答案:

答案 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);