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)
SyntaxError:意外的令牌/ strong>
而
m =JSON.parse("[{\"id\": 2, \"da\": \"1\"}]")
正常运行
答案 0 :(得分:3)
这是因为当它从服务器返回时,结果是将存储作为字符串存储,因此字符串本身在每个\
之前包含"
转义字符。转义JSON字符串中的"
字符无效。
就像在做:
var json = '{\\"test\\":\\"test\\"}';
json //"{\"test\":\"test\"}"
JSON.parse(json); //SyntaxError: Unexpected token \
但是,当您接受该字符串并将其直接放在控制台中时,\
字符将扮演其转义角色,并且最终不会成为实际字符串的一部分。基本上,服务器端生成的JSON字符串不应该转义"
个字符。
您也可以替换客户端的无效ecape序列,但我不建议这样做:
JSON.parse(json.replace(/\\"/g, '"'));
答案 1 :(得分:0)
根据您评论中的图片,您没有在帖子中讲述整个故事。如果你做一个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);