3

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 文档中使用的特殊结构吗?

4

1 回答 1

1

一般来说,没有。

诚然,有很多错误(例如,MongoDB 提供String Parse Error大于 64 位 unsingned INT 的数字)。其中一些是错误,而另一些则是固有的平台限制——与任何其他重要的计算机系统一样。

但是定义 JSON 的“安全子集”我通常不相信会发生。虽然您可以获得JSON 模式,但让全世界的每个人都同意做和不做的事情不太可能发生。

从广义上讲,JSON 很受欢迎,因为它没有固有的限制。(与 ex. ASN.1 或 XML 相反。)

于 2011-05-09T08:10:11.337 回答