我正在创建一个JSON解析器。我几乎完成了,我需要做的就是如果插入到对象中,应该如何解析特殊字符。我现在正在查看内置版本的JSON。
Str3 = '{\r\n"glossary": {\n"title": "example glossary"}}';
JSON.parse(Str3)
>>>Object {glossary: Object}
似乎JSON.parse完全忽略了特殊字符。这实际上是发生了什么?或者是否有更多的事情发生在引擎盖下?
对不起,如果我的英语不好。
答案 0 :(得分:2)
标准ECMA-404: The JSON Data Interchange Format中解释了这一点:
任何令牌之前或之后都允许使用无关紧要的空格。空白字符是:字符 制表(U + 0009),换行(U + 000A),回车(U + 000D)和空格(U + 0020)。
和JSON.org:
可以在任何一对令牌之间插入空格。
在JavaScript中构建Str3
时,您使用了语法\r
和\n
。这个escape notation分别由JavaScript解释器转换为回车符(U + 000D)和换行符(U + 000A):
String.fromCharCode(0x000D) === '\r'
>>> true
'\r' === '\u000d'
>>> true
String.fromCharCode(0x000A) === '\n'
>>> true
'\n' === '\u000a'
>>> true
要拥有一致的JSON解析器,必须允许空格字符出现在输入的标记之间。