我想做的很简单。将包含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会给我一个"缺少分号"错误信息。是否有可能用我正在尝试的引号解析数组?
答案 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\"}]