【问题标题】:How does parsing special characters in JSON work?解析 JSON 中的特殊字符是如何工作的?
【发布时间】:2015-01-13 05:40:07
【问题描述】:

好吧,我知道我可能会因为提出这样一个“简单”的问题而被大喊大叫(似乎是这里的趋势),但请检查一下……

我正在构建一个 JSON 解析器,除了解析器处理特殊字符的能力外,一切都正常工作。我正在尝试实现http://www.json.org/ 上列出的相同特殊字符,即 [", \, /, b, f, n, r, t, u]。

不过,当我通过内置 JSON.parse 方法运行这些特殊字符时,它们中的大多数要么返回错误,要么根本不执行任何操作

JSON.parse('["\\"]')
SyntaxError: Unexpected end of input

JSON.parse("['\"']")
SyntaxError: Unexpected token ‘

JSON.parse('["\b"]')
SyntaxError: Unexpected token 

JSON.parse('["\f"]')
SyntaxError: Unexpected token 

是的,我看到另一个帖子"Parsing JSON with special characters",它与我的问题无关。不要让我问另一个问题,我都看过了。解析 JSON 中的特殊字符是如何工作的?

【问题讨论】:

  • 反斜杠代码正在由 javascript 解释。如果要在字符串中传递反斜杠,则需要对其进行转义。因此,例如,要让 JSON.parse “看到”\n,您需要 JSON-parse('["\\n"]')

标签: json parsing


【解决方案1】:

JSON.parse 需要 JavaScript 字符串。

JavaScript 字符串文字使用反斜杠进行转义。

JSON 使用反斜杠进行转义。

所以...

JSON.parse('["\\\\"]')
// ["\"]

JSON.parse("['\"']")
// SyntaxError: Unexpected token '
// JSON doesn't have single quotes as string delimiters!

JSON.parse('["\\b"]')
// [""]

JSON.parse('["\\f"]')
// [""]

JSON.parse('["\\\\b"]')
// ["\b"]

JSON.parse('["\\\\f"]')
// ["\f"]

【讨论】:

    【解决方案2】:

    您在这里遇到问题的原因是因为\ 也是 javascript 字符串中特殊字符的标记。

    举第一个例子:'["\\"]'。当 javascript 解析此字符串时,\\ 被转义为字符串中的单个 \,因此传递给 JSON.parse 方法的值实际上是 ["\"] - 因此是“输入错误的意外结束”。

    基本上,您需要通过加倍反斜杠转义序列来满足 javascript 解析器的需求。在这种情况下,要将您想要的["\\"] 值传递给JSON.parse,您需要在javascript 中使用JSON.parse('["\\\\"]'),因为这会将字符串["\\"] 传递给JSON.parse 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多