在JSON.org列出的实施中,我偶然发现JSON_checker。
它的版权归JSON.org所有(这就是为什么我称之为“官方”)并且它似乎是最新的:2016-10-24
标记在JSON_checker.c
的顶部。< / p>
但是,我注意到状态转换表(JSON_checker.c
中的第143行)定义了起始状态(称为GO
),这样它只允许:
{
)[
)其他“原始”值类型怎么样:String,Number,Boolean,Null?
确实存在一个允许这些基元以及对象和数组的状态(称为VA
的值)。但为什么不是最初的起始状态?
例如;一个简单的JSON文档,只包含:
null
根据JSON_checker认为不合法。
很明显,这是设计上的;测试套件中的第一个测试(fail1.json
)明确指出:
"A JSON payload should be an object or array, not a string."
为什么会这样?我之前使用JSON的经验是,顶层允许任何JSON值。