【问题标题】:read a json string which has a "'" (malformed?)读取一个带有“'”的json字符串(格式错误?)
【发布时间】:2013-10-09 07:54:55
【问题描述】:

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

如果我这样做了

JSON.parse (data)

我得到一个

SyntaxError: Unexpected token

我知道该服务有效,因为错误取决于输入参数。 换句话说,有时它确实有效! HTTP 响应码是 200,所以不是某种访问错误,而且是可重复的。

我可以假设他们返回格式错误的 JSON 吗? 将数据作为文本文件写入磁盘并像这样读取:

fs = 要求('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', '{', '['

编辑2: 这是整个文件: http://pastebin.com/ACUfvPCx

【问题讨论】:

  • 好像有语法错误
  • 我自己也是这么认为的。
  • 尝试验证数据:jsonlint.com 并说出它所说的内容。
  • 你能发布实际的错误 JSON 吗?如果我们能看到它,我们或许能够做出更准确的判断。
  • @fablife 好吧,你能在报告错误的地方只发布一段文件吗?

标签: javascript json node.js coffeescript


【解决方案1】:

服务确实返回了格式错误的 JSON。

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

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

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2015-03-07
    相关资源
    最近更新 更多