我需要使用返回JSON的服务。我对该服务(第三方)没有任何影响。
如果我这样做
JSON.parse (data)
我得到了
SyntaxError: Unexpected token
我知道该服务有效,因为根据输入参数发生错误。 换句话说,有时肯定会有效! HTTP响应代码是200,因此它不是某种访问错误,并且它是可重复的。
我可以假设他们正在返回格式错误的JSON吗? 将数据作为文本文件写入磁盘并按如下方式读取:
fs = require('fs')
fs.readFile 'output.json', '', (err, data) ->
if err?
console.log err
json = JSON.parse(data)
console.log json
返回
undefined:1
De L\'Embustier
^
SyntaxError: Unexpected token '
at Object.parse (native)
这有点奇怪,因为好像字符串被正确转义但是它仍然无法正确读取。
文件是300 + k;还没有看到如何附上它。
编辑: 来自jsonlint.com的回复
Parse error on line 1297:
... "Address": "36 Rue De L\'Embust
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
EDIT2: 这是整个文件: http://pastebin.com/ACUfvPCx
答案 0 :(得分:6)
该服务确实返回格式错误的JSON。
JSON中没有\'
转义序列。在Javascript中转义任何字符都是完全有效的,但JSON使用Javascript语法的一个子集,只允许转义实际上需要转义的字符。由于撇号在JSON中不用作字符串分隔符,因此它永远不需要转义。
如果您无法修复服务,则需要将JSON请求为纯文本,仅使用撇号本身替换转义的撇号,然后将文本解析为JSON。