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