那么,有效的 JSON 必须是对象或数组,对吗?我期待以下代码引发异常,但事实并非如此:
>>> import json
>>> json.loads("245235")
245235
这不是无效的 JSON*。Number 是一个有效的 JSON 类型,就像 object。http://en.wikipedia.org/wiki/JSON#Data_types.2C_syntax_and_example这些类型中的任何一个都可以单独出现,尽管对象和数组可能是最常见的顶级类型。
*根据python实现
编辑:
正如在已删除(不确定为什么)的答案中指出的那样,python 文档建议 JSON RFC 确实要求顶级对象为数组或对象类型,但该json
模块不强制执行此操作。由于我对 JSON 的很多了解都来自使用 pythonjson
模块,因此我不知道这种行为的可移植性如何。
根据要求,这在http://docs.python.org/2/library/json.html#standard-compliance中注明:
该模块不以严格的方式遵守 RFC,实现了一些有效 JavaScript 但无效 JSON 的扩展。尤其:
- 接受并输出顶级非对象、非数组值;
- 接受并输出无穷大和 NaN 数值;
- 接受对象内的重复名称,并且仅使用最后一个名称-值对的值。
JSON 数据可以有多种类型,包括字符串、数字和布尔值