为什么Javascript不能从字符串文字解析这个JSON数组?

时间:2015-06-30 14:27:12

标签: javascript jquery json jsp interpolation

我想做的很简单。将包含json对象的数组解析为Javascript数组。

var merchantsJson = JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\u0022\u003C/div\u003E"}]');

但unicode字符\ u003C似乎打破了解析器。在chrome控制台中,我看到" Uncaught SyntaxError:Unexpected token<"

更多信息。以上是代码评估的内容。实际上,代码包含一个jsp表达式。

var merchantsJson = JSON.parse('${jsonArr}');

如果我删除单引号,则没有问题,但是eclipse会给我一个"缺少分号"错误信息。是否有可能用我正在尝试的引号解析数组?

5 个答案:

答案 0 :(得分:12)

${jsonArr}的插值已经是一个JavaScript对象。当您将其包裹在'${jsonArr}'中时,会将其变为字符串,您必须使用JSON.parse

没有必要把它变成一个字符串。你可以var merchantsArray = ${jsonArr}。 JSON构造已经可以与JavaScript代码互操作。

答案 1 :(得分:8)

因为您的字符串文字中额外"\u0022编码:

> '[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\u0022\u003C/div\u003E"}]'
[{"id":61693,"name":"Más"},{"id":61690,"name":"'"</div>"}]

简而言之,字符串中的JSON无效。您需要使用

转义字符串文字("'\u0022</div>")中引号的unicode转义序列
JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\\u0022\u003C/div\u003E"}]'
//                                                               ^

或转义引号字符("'\"</div>"):

JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\\\u0022\u003C/div\u003E"}]');
//                                                               ^^

然而,实际上根本不需要使用JSON。只需将JS数组文字输出到您的代码中:

var merchantsJson = ${jsonArr};

答案 2 :(得分:6)

尝试将\u替换为\\u。如果你不这样做,JSON解析器会收到已解码的Unicode,这会创建污染的JSON。

答案 3 :(得分:3)

这不是因为它而是\u0022字符引起了问题,因为它是一个引号,而JavaScript则认为字面上结束了字符串。

你需要逃避这个角色:\\u0022

答案 4 :(得分:0)

您必须在JSON字符串中使用特殊字符,可以使用\字符对其进行转义。

您需要将\替换为\\

[{\"id\":61693,\"name\":\"Más\"},{\"id\":61690,\"name\":\"\\u0027\\u0022\\u003C/div\\u003E\"}]