读一个有"'"的json字符串(格式错误?)

fab*_*ous 0 javascript json node.js coffeescript

我需要使用返回JSON的服务.我对该服务(第三方)没有任何影响.

如果我做

JSON.parse (data)
Run Code Online (Sandbox Code Playgroud)

我得到了

SyntaxError: Unexpected token
Run Code Online (Sandbox Code Playgroud)

我知道该服务有效,因为错误发生取决于输入参数.换句话说,有时肯定会有效!HTTP响应代码是200,因此它不是某种访问错误,并且它是可重复的.

我可以假设他们正在返回格式错误的JSON吗?将数据作为文本文件写入磁盘并按如下方式读取:

fs = require('fs')

fs.readFile 'output.json', '', (err, data) ->
  if err?
    console.log err
  json = JSON.parse(data)
  console.log json
Run Code Online (Sandbox Code Playgroud)

回报

undefined:1
 De L\'Embustier
      ^
SyntaxError: Unexpected token '
    at Object.parse (native)
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为好像字符串被正确转义,但它仍然没有被正确读取.

文件是300 + k; 还没有看到如何附上它.

编辑:来自jsonlint.com的回复

Parse error on line 1297:
...         "Address": "36 Rue De L\'Embust
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
Run Code Online (Sandbox Code Playgroud)

EDIT2:这是整个文件:http: //pastebin.com/ACUfvPCx

Guf*_*ffa 6

该服务确实返回格式错误的JSON.

\'JSON中没有转义序列.在Javascript中转义任何字符都是完全有效的,但JSON使用Javascript语法的一个子集,只允许转义实际上需要转义的字符.由于撇号在JSON中不用作字符串分隔符,因此它永远不需要转义.

如果您无法修复服务,则需要将JSON请求为纯文本,仅使用撇号本身替换转义的撇号,然后将文本解析为JSON.