NodeJS SyntaxError: Unexpected token in JSON at position 0
NodeJS SyntaxError: Unexpected token in JSON at position 0
来自 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']);
returns 这个:application/json; charset=utf-8
我做错了什么?我想将 JSON 解析成一个 JS 对象。
其实你没看到,但是有一个看不见的unicode字符,具体是JSON.
开头的字节顺序标记
由于字节顺序标记不是有效的 JSON 字符,JSON.parse 拒绝了它。
要删除,请使用以下代码。
function removeByteOrderMark(str){
return str.replace(/^\ufeff/g,"")
}
// OR (faster),
let removeByteOrderMark = a=>a[0]=="\ufeff"?a.slice(1):a
我们在一个项目中遇到了与 JSON.parse()
相同的问题。我们只是使用 JSON.stringfy()
并且该对象工作正常,但是在我们接收数据的另一个平台上它有一个类似的错误 “位置 1 JSON 中的意外令牌” .
我们是这样实现的:
- 在 NodeJs 中,我们使用
encodeURI()
对字符串化对象进行编码,然后发送它
- 在客户端:解码字符串然后在解码后的字符串上使用
JSON.parse()
分析:
我尝试从该位置打印字符,然后将其替换为空字符串,然后我们意识到它甚至在替换后打印其他奇怪的字符。之后我意识到这是一个 HTML 代码 """
所以我们没有替换它而是对字符串进行编码和解码。
我们在我们的案例中试过了,没有问题
来自 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']);
returns 这个:application/json; charset=utf-8
我做错了什么?我想将 JSON 解析成一个 JS 对象。
其实你没看到,但是有一个看不见的unicode字符,具体是JSON.
开头的字节顺序标记
由于字节顺序标记不是有效的 JSON 字符,JSON.parse 拒绝了它。
要删除,请使用以下代码。
function removeByteOrderMark(str){
return str.replace(/^\ufeff/g,"")
}
// OR (faster),
let removeByteOrderMark = a=>a[0]=="\ufeff"?a.slice(1):a
我们在一个项目中遇到了与 JSON.parse()
相同的问题。我们只是使用 JSON.stringfy()
并且该对象工作正常,但是在我们接收数据的另一个平台上它有一个类似的错误 “位置 1 JSON 中的意外令牌” .
我们是这样实现的:
- 在 NodeJs 中,我们使用
encodeURI()
对字符串化对象进行编码,然后发送它 - 在客户端:解码字符串然后在解码后的字符串上使用
JSON.parse()
分析:
我尝试从该位置打印字符,然后将其替换为空字符串,然后我们意识到它甚至在替换后打印其他奇怪的字符。之后我意识到这是一个 HTML 代码 """
所以我们没有替换它而是对字符串进行编码和解码。
我们在我们的案例中试过了,没有问题