NodeJS SyntaxError:JSON中的意外令牌在位置0

时间:2019-05-02 22:13:13

标签: node.js json response authorize.net

Authorize.net的沙箱API的响应body是:

"{"messages":{"resultCode":"Error","message":[{"code":"E00012","text":"You have submitted a duplicate of Subscription 5777085. A duplicate subscription will not be created."}]}}"

但是当我去解析它时:

try {
   bodyObj = JSON.parse(body);
} catch (ex) {
   console.error(ex);
}

我收到此错误:SyntaxError: Unexpected token  in JSON at position 0

这是console.log(response.headers['content-type']);

返回以下内容:application/json; charset=utf-8

我在做什么错?我想将JSON解析为JS对象。

2 个答案:

答案 0 :(得分:2)

实际上您没有看到它,但是有一个看不见的Unicode字符,特别是JSON开头的字节顺序标记。
由于字节顺序标记不是有效的JSON字符,因此JSON.parse拒绝了它。
byte order mark image
要删除,请使用以下代码。

function removeByteOrderMark(str){
    return str.replace(/^\ufeff/g,"")
}

答案 1 :(得分:1)

在我们正在开展的项目中,JSON.parse() 也遇到了同样的问题。我们只是使用 JSON.stringfy() 并且对象运行良好,但在我们接收数据的另一个平台上,它有类似的错误“JSON 中的意外令牌位于位置 1”。< /p>

我们是这样实现的:

  1. 在 NodeJs 中,我们使用 encodeURI() 对字符串化对象进行编码,然后将其发送
  2. 在客户端:对字符串进行解码,然后在解码后的字符串上使用 JSON.parse()

分析

我尝试从位置打印字符,然后用空字符串替换它,然后我们意识到即使在替换它们之后它也会打印其他奇怪的字符。之后我意识到这是一个 HTML 代码 "&quot;" 所以我们没有替换它,而是对它的字符串进行编码和解码。
我们在我们的案例中尝试过,没有问题