【问题标题】:Is there a safe subset of JSON that can be used with all JSON parsers & databases是否有一个安全的 JSON 子集可以与所有 JSON 解析器和数据库一起使用
【发布时间】: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


    【解决方案1】:

    一般不会。

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-10-08
      • 2014-08-27
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多