【发布时间】:2021-04-25 00:30:00
【问题描述】:
为什么JSON.parse解析下面的JSON字符串失败?
这不是有效的 JSON 吗?
奇怪的是,https://jsonlint.com/ 会验证此字符串,即使其自定义 JSON parser 会引发与 JSON.parse 相同的错误。
JSON 字符串
{
"Search results: \":s\"": ""
}
代码
let test = `{
"Search results: \":s\"": ""
}`
JSON.parse(test);
结果
VM1882:2 Uncaught SyntaxError: Unexpected token s in JSON at position 22 在 JSON.parse() 在:1:6
【问题讨论】:
-
反斜杠字符引用
"字符作为外层字符串。您必须将反斜杠加倍,因为有两个解析阶段。 -
或者你必须
let test = String.raw`{ ... }` -
@Pointy 感谢您的快速响应。澄清一下,jsonlint.com 认为这个 JSON 有效是错误的吗?
-
@Thomas 使用
String.raw似乎有效。你知道为什么吗?你也想发帖作为答案吗? -
不,jsonlint.com 没有错,这是有效的 JSON。问题是您将其逐字输入到 JavaScript 文档中,而没有为 JavaScript 转义它。如果将相同的内容放入文本文件,加载文本文件,然后将内容解析为 JSON,则可以正常工作。
标签: javascript json jsonlint