NodeJS SyntaxError:JSON 中位置 0 的意外标记
Posted
技术标签:
【中文标题】NodeJS SyntaxError:JSON 中位置 0 的意外标记【英文标题】:NodeJS SyntaxError: Unexpected token in JSON at position 0 【发布时间】:2019-09-21 11:24:55 【问题描述】: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: JSON 中位置 0 的意外标记
还有这个:console.log(response.headers['content-type']);
返回:application/json; charset=utf-8
我做错了什么?我想把 JSON 解析成一个 JS 对象。
【问题讨论】:
您的代码不能证明您声称的内容,因此至少在该 try 块之前添加一个console.log(body)
,这样您就可以向自己证明 body
包含您认为/声称的内容.
【参考方案1】:
其实你没看到,但是有一个看不见的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
【讨论】:
有意思,用这个字符怎么解析? community.developer.authorize.net/t5/Integration-and-Testing/… @orangeMint 我添加了一个函数来删除这个字符到我的答案中。 @smileycreations15 你拯救了我的一天! @PatNeedham 没问题! :D【参考方案2】:在我们正在进行的项目中,JSON.parse()
遇到了同样的问题。我们只是在使用JSON.stringfy()
,并且该对象工作正常,但在我们收到数据的另一个平台上,它有类似的错误“位置 1 处 JSON 中的意外令牌”。
我们是这样做的:
-
在 NodeJs 中,我们使用
encodeURI()
对字符串化对象进行编码,然后将其发送
在客户端:解码字符串然后在解码后的字符串上使用JSON.parse()
分析:
我尝试从该位置打印字符,然后用空字符串替换它,然后我们意识到即使在替换它们之后它也会打印其他奇怪的字符。之后我意识到这是一个 html 代码"""
,所以我们没有替换它,而是对它的字符串进行编码和解码。
我们在我们的案例上进行了尝试,它没有任何问题
【讨论】:
以上是关于NodeJS SyntaxError:JSON 中位置 0 的意外标记的主要内容,如果未能解决你的问题,请参考以下文章
NodeJs JSON.parse-SyntaxError:JSON中位置0处的意外令牌u
SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束
Angular2 HTTP POST发生错误SyntaxError:JSON输入意外结束