[英]Why can't Javascript parse this JSON array from a string literal?
我想要做的很簡單。 將此包含 json 對象的數組解析為 Javascript 數組。
var merchantsJson = JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\u0022\u003C/div\u003E"}]');
但是 unicode 字符 \< 似乎破壞了解析器。 在 Chrome 控制台中,我看到“Uncaught SyntaxError: Unexpected token <”
多一點信息。 以上是代碼的評估結果。 實際上,代碼包含一個jsp 表達式。
var merchantsJson = JSON.parse('${jsonArr}');
如果我刪除單引號,就沒有問題,但是 eclipse 會給我一個“缺少分號”的錯誤消息。 是否可以像我一樣用引號解析數組?
${jsonArr}
的插值已經是一個 JavaScript 對象。 當您將其包裝在'${jsonArr}'
這會將其轉換為字符串,您必須使用JSON.parse
。
沒有必要把它變成一個字符串。 你可以只做var merchantsArray = ${jsonArr}
。 JSON 結構已經可以與 JavaScript 代碼互操作。
因為您的字符串文字中有一個額外的"
由"
編碼:
> '[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\u0022\u003C/div\u003E"}]'
[{"id":61693,"name":"Más"},{"id":61690,"name":"'"</div>"}]
簡而言之,您在字符串中的 JSON 無效。 您需要使用轉義字符串文字 ( "'"</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};
嘗試用
\\\\u\u003c/code>替換
\\u\u003c/code>
\\\\u\u003c/code> 。
如果不這樣做,JSON 解析器會接收已解碼的 Unicode,這會創建污染的 JSON。
這不是因為 \<,而是"字符導致了問題,因為它是一個引號,而 JavaScript 將它視為字面上的字符串結尾。
您需要轉義該字符: \\"
。
您必須在 JSON 字符串中使用特殊字符,您可以使用 \\ 字符對其進行轉義。
你需要用\\\\
替換\\
。
[{\"id\":61693,\"name\":\"Más\"},{\"id\":61690,\"name\":\"\\u0027\\u0022\\u003C/div\\u003E\"}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.