簡體   English   中英

為什么 Javascript 不能從字符串文字中解析這個 JSON 數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM