JSON.parse(message) 失败,但“https://jsonlint.com/”显示消息有效。为啥会这样?

Posted

技术标签:

【中文标题】JSON.parse(message) 失败,但“https://jsonlint.com/”显示消息有效。为啥会这样?【英文标题】:JSON.parse(message) fails but "https://jsonlint.com/" shows that the message is valid. Why does this happen?JSON.parse(message) 失败,但“https://jsonlint.com/”显示消息有效。为什么会这样? 【发布时间】:2021-12-25 00:19:48 【问题描述】:

这里失败了,

message = "\"response\":\"billDetails\":\"[\"name\":\"Account ID\"]\""
JSON.parse(message)
JSON::ParserError (809: unexpected token at '"response":"billDetails":"["name":"Account ID"]"')

【问题讨论】:

【参考方案1】:

我不确定这是否会有所帮助。但是你的 json 字符串应该写自

"
  "response":
    "billDetails": "["name":"Account ID"]"
"

收件人:

'
  "response":
    "billDetails": ["name":"Account ID"]
    
'

在来自 billDetails 的数组中,您有两个额外的 ",在解析该字符串时会引发错误。

【讨论】:

谢谢先生。我使用 gsub 替换了额外的引号,它可以工作。 :) 所有类型的括号都存在这个问题。我猜 json lint 验证器是错误的。

以上是关于JSON.parse(message) 失败,但“https://jsonlint.com/”显示消息有效。为啥会这样?的主要内容,如果未能解决你的问题,请参考以下文章

JSON.parse解析出错解决办法

JSON.parse 解析json字符串时,遇字符串换行符,解析失败

JSON.parse和JSON.stringify的区别

SyntaxError:JSON.parse:JSON 的第 1 行第 2 列出现意外字符

在 JSON.parse 期间在节点中捕获异常

JSON parse error: Invalid UTF-8 解决办法系列