如何解析JSON中的特殊字符?

时间:2015-01-13 05:40:07

标签: json parsing

好吧,我知道我可能会因为问这么“简单”的问题而大喊大叫(这似乎是这里的趋势),但要检查一下......

我正在构建一个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中的特殊字符?

2 个答案:

答案 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方法