簡體   English   中英

為什么我會收到意外令牌\\

[英]Why am I am getting Unexpected token \

k ="[{\"id\": 1, \"latitude\": \"52.511467\", \"longitude\": \"13.447179\", \"bearing\": \"0.000000\", \"speed\": \"0.000000\", \"device_status\": 0, \"timestamp\": \"2013-08-18 00:00:00\"}, {\"id\": 3, \"latitude\": \"53.511467\", \"longitude\": \"14.447179\", \"bearing\": \"1.000000\", \"speed\": \"1.000000\", \"device_status\": 2, \"timestamp\": \"2013-08-18 00:00:00\"}, {\"id\": 4, \"latitude\": \"54.511467\", \"longitude\": \"15.447179\", \"bearing\": \"1.000000\", \"speed\": \"1.000000\", \"device_status\": 2, \"timestamp\": \"2013-08-18 00:00:00\"}, {\"id\": 5, \"latitude\": \"33.511467\", \"longitude\": \"72.447179\", \"bearing\": \"1.000000\", \"speed\": \"1.000000\", \"device_status\": 1, \"timestamp\": \"2013-08-18 00:00:00\"}]"

R = JSON.parse(k)

語法錯誤:意外的令牌\\

m =JSON.parse("[{\"id\": 2, \"da\": \"1\"}]")

正在正常工作

這是因為從服務器返回時,結果將作為字符串存儲,因此字符串本身在每個"之前都包含\\轉義字符。對JSON字符串中的"字符進行轉義是無效的。

就像在做:

var json = '{\\"test\\":\\"test\\"}';
json //"{\"test\":\"test\"}"
JSON.parse(json); //SyntaxError: Unexpected token \

但是,當您使用該字符串並將其直接放在控制台中時, \\字符將扮演其轉義角色,並且不會在末尾成為實際字符串的一部分。 基本上,服務器端生成的JSON字符串不應轉義"字符。

您也可以在客戶端替換無效的ecape序列,但我不建議這樣做:

JSON.parse(json.replace(/\\"/g, '"'));

根據評論中的圖像,您沒有在帖子中講述整個故事。 如果您執行console.log(k),您會發現它看起來與currentTrackData輸出在控制台中所看到的完全不同:

>>> [{\"id\": 1, \"latitude\": \"52.511467\", \"longitude\": \"13.447179\", \"bearing\": \"0.000000\", \"speed\": \"0.000000\", \"device_status\": 0, \"timestamp\": \"2013-08-18 00:00:00\"}, {\"id\": 3, \"latitude\": \"53.511467\", \"longitude\": \"14.447179\", \"bearing\": \"1.000000\", \"speed\": \"1.000000\", \"device_status\": 2, \"timestamp\": \"2013-08-18 00:00:00\"}, {\"id\": 4, \"latitude\": \"54.511467\", \"longitude\": \"15.447179\", \"bearing\": \"1.000000\", \"speed\": \"1.000000\", \"device_status\": 2, \"timestamp\": \"2013-08-18 00:00:00\"}, {\"id\": 5, \"latitude\": \"33.511467\", \"longitude\": \"72.447179\", \"bearing\": \"1.000000\", \"speed\": \"1.000000\", \"device_status\": 1, \"timestamp\": \"2013-08-18 00:00:00\"}]

告訴我們該字符串包含\\" 。如果您將該內容分配給var,

var k = "[{...\"..}]"
console.log(k);
>>> [{..."...}]

那么您正在明確解決問題,因為您的字符串中的那些\\"變成了" 如果將輸出直接傳遞到JSON.parse,則輸入中會有一百萬個斜杠,使其成為非法JSON。

如果這是服務器生成的,請修復生成器。 它不應該為您轉義該字符串。 如果您沒有那么奢侈,請進行字符串替換。

var u = currentTrackData...;
u = u.replace(/\\"/g, '"');
JSON.parse(u);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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