开发者问题收集

JSON:解析时出错

2015-04-04
232

我有以下 JSON (有效) 字符串。

[["abc","{\"icon\":\"adjust\",\"prefix\":\"fa\",\"markerColor\":\"red\"}"],["xyz","{\"icon\":\"archive\",\"prefix\":\"fa\",\"markerColor\":\"green\"}"],["azs","{\"icon\":\"asterisk\",\"prefix\":\"fa\",\"markerColor\":\"darkred\"}"]]

当我尝试使用 JSON.parse 函数进行解析时,它会出现错误 这是我用于解析的代码。

JSON.parse('[["abc","{\"icon\":\"adjust\",\"prefix\":\"fa\",\"markerColor\":\"red\"}"],["xyz","{\"icon\":\"archive\",\"prefix\":\"fa\",\"markerColor\":\"green\"}"],["azs","{\"icon\":\"asterisk\",\"prefix\":\"fa\",\"markerColor\":\"darkred\"}"]]');

并且它在控制台中出现错误 Uncaught SyntaxError: Unexpected token i

这是使用在线 JSON 查看器对相同字符串的正确输出。 使用在线 JSON 查看器对相同字符串的正确输出

3个回答

使用 JSON 查看器与在 JS 代码中使用代码有所不同。如 @Jonathan 所述,您应该对 JSON 字符串进行双重转义。

JSON.parse('[["abc","{\\"icon\\":\\"adjust\\",\\"prefix\\":\\"fa\\",\\"markerColor\\":\\"red\\"}"],["xyz","{\\"icon\\":\\"archive\\",\\"prefix\\":\\"fa\\",\\"markerColor\\":\\"green\\"}"],["azs","{\\"icon\\":\\"asterisk\\",\\"prefix\\":\\"fa\\",\\"markerColor\\":\\"darkred\\"}"]]');
That Guy
2015-04-04

您需要在字符串文字内对转义符 ( \ ) 本身进行转义。

此外,您可以分两次解析此数据。

const data = `[["abc","{\\"icon\\":\\"adjust\\",\\"prefix\\":\\"fa\\",\\"markerColor\\":\\"red\\"}"],["xyz","{\\"icon\\":\\"archive\\",\\"prefix\\":\\"fa\\",\\"markerColor\\":\\"green\\"}"],["azs","{\\"icon\\":\\"asterisk\\",\\"prefix\\":\\"fa\\",\\"markerColor\\":\\"darkred\\"}"]]`;

const firstPass = JSON.parse(data);
const secondPass = firstPass.map(([k, v]) => [k, JSON.parse(v)]);

console.log(secondPass);
.as-console-wrapper { top: 0; max-height: 100% !important; }
Mr. Polywhirl
2024-06-19

您的 json 结构无效。您应该改用以下格式(不带斜杠):

  '[["abc",["icon":"adjust","prefix":"fa","markerColor":"red"]],["xyz",["icon":"archive","prefix":"fa","markerColor":"green"]],["azs",["icon":"asterisk","prefix":"fa","markerColor":"darkred"]]'
hamed
2015-04-04