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对象。
答案 0 :(得分:2)
实际上您没有看到它,但是有一个看不见的Unicode字符,特别是JSON开头的字节顺序标记。
由于字节顺序标记不是有效的JSON字符,因此JSON.parse拒绝了它。
要删除,请使用以下代码。
function removeByteOrderMark(str){
return str.replace(/^\ufeff/g,"")
}
答案 1 :(得分:1)
在我们正在开展的项目中,JSON.parse()
也遇到了同样的问题。我们只是使用 JSON.stringfy()
并且对象运行良好,但在我们接收数据的另一个平台上,它有类似的错误“JSON 中的意外令牌位于位置 1”。< /p>
我们是这样实现的:
encodeURI()
对字符串化对象进行编码,然后将其发送JSON.parse()
分析:
我尝试从位置打印字符,然后用空字符串替换它,然后我们意识到即使在替换它们之后它也会打印其他奇怪的字符。之后我意识到这是一个 HTML 代码 """
所以我们没有替换它,而是对它的字符串进行编码和解码。
我们在我们的案例中尝试过,没有问题