我正在阅读RFC 4627,但我无法确定以下内容是否属于有效的JSON。考虑以下最简单的JSON文本:
["\u005c"]
问题在于小写字母。 根据RFC的文本,这是允许的:
任何字符都可以被转义。如果该字符在基本多文种平面(U+0000到U+FFFF)中,则可以将其表示为六字符序列:反斜杠、小写字母u,后跟四个十六进制数字,这些数字编码了字符的代码点。十六进制字母A到F可以是大写或小写。例如,仅包含一个反斜杠字符的字符串可以表示为"\u005C"。
(重点是由我强调的)
问题是RFC还包含了此语法。
char = unescaped /
escape (
%x22 / ; " quotation mark U+0022
%x5C / ; \ reverse solidus U+005C
%x2F / ; / solidus U+002F
%x62 / ; b backspace U+0008
%x66 / ; f form feed U+000C
%x6E / ; n line feed U+000A
%x72 / ; r carriage return U+000D
%x74 / ; t tab U+0009
%x75 4HEXDIG ) ; uXXXX U+XXXX
其中HEXDIG
在RFC 4234中被定义为
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
这个内容只包含大写字母。
就我所了解的,大多数JSON解析器都接受大小写字母。
问题:到底哪个是正确的?是否存在矛盾,RFC中的语法需要修正?
HEXDIG
和heXdIG
可以互换使用,但肯定不能像"A"
一样涵盖语法中的所有字符,否则你就无法定义任何区分大小写的语言了! - Daniel Freyfalse = %x66.61.6c.73.65 ; false
。 - silmeth