好吧,我知道我可能会因为问这么“简单”的问题而大喊大叫(这似乎是这里的趋势),但要检查一下......
我正在构建一个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中的特殊字符?
答案 0 :(得分: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"]
答案 1 :(得分:1)
您在此处遇到问题的原因是\
也是javascript字符串中特殊字符的标记。
举个例子:'["\\"]'
。当javascript解析此字符串时,\\
会转义为字符串中的单个\
,因此传递给JSON.parse
方法的值实际上是["\"]
- 因此"意外结束输入错误"。
基本上,你需要通过加倍反斜杠转义序列来满足javascript解析器的需要。在这种情况下,要将预期的["\\"]
值传递给JSON.parse
,您需要在javascript中使用JSON.parse('["\\\\"]')
,因为这会将字符串["\\"]
传递到JSON.parse
方法