JSON 对于数据交换仍然变得越来越重要,但JSON 规范在某些方面相当松懈:
对象中的名称应该是唯一的。
一个实现可以对它接受的文本的大小设置限制。实现可以对最大嵌套深度设置限制。实现可以对数字范围设置限制。实现可以对字符串的长度和字符内容设置限制。
我认为大多数 JSON 解析器会忽略重复的对象键,并且不区分负零 (-0) 和零。大多数还可能将数字限制为 32 位浮点数或有符号整数。此外,JSON 允许包含无效的 Unicode 代码点的字符(请参阅此问题)。而且我敢打赌,在基本多语言平面(U+0000 到 U+FFFF)之上的 Unicode 字符可能会出现问题。但是 JSON 规范也不是这样,CouchDB、MongoDB、Persevere/Dojo 等 JSON 数据库也增加了限制:我怀疑您是否可以在所有 JSON 存储中使用对象键(如id
、_id
和) $ref
,因为它们在每个系统中可能具有特殊含义。
这有点令人沮丧:JSON 应该很容易,但越仔细看,就会发现越多的障碍。是否有一个通用的(不太严格的)JSON 子集可以安全地在所有解析器和数据库中使用,或者 NoSQL 运动会添加越来越多的扩展和不应该在 JSON 文档中使用的特殊结构吗?