处理 JSON 数据

本页面介绍了如何使用 Spanner 处理 JSON。

JSON 数据类型是一种用于保存 JSON(JavaScript Object Notation,JavaScript 对象表示法)数据的半结构化数据类型。有关 JSON 格式的规范,请参阅 RFC 7159

JSON 适合用于为数据稀疏或松散定义或更改架构的数据补充关系架构。但是,查询优化器依赖于关系模型来高效地进行大规模过滤、联接、聚合和排序。通过 JSON 进行查询所需的内置优化较少,并且检查和调整性能的能力也较少。

规格

Spanner JSON 类型存储输入 JSON 文档的标准化表示形式。

  • JSON 最多支持 80 层嵌套。
  • 不保留空格。
  • 不支持注释。含有注释的事务或查询将会失败。
  • JSON 对象的成员按字典顺序排序。
  • JSON 数组元素将保留其顺序。
  • 如果 JSON 对象具有重复的键,则仅保留第一个键。
  • 基元类型(字符串、布尔值、数字和 null)保留其类型和值。
    • 字符串类型值原样保留。
    • 数字类型值会保留,但其文本表示法可能会因标准化过程而发生变化。例如,输入数字 10000 的标准化表示法可能为 1e+4。数字值保留语义如下所示:
      • 保留 [INT64_MIN, INT64_MAX] 范围内的有符号整数。
      • 保留 [0, UINT64_MAX] 范围内的无符号整数。
      • 保留可以进行从字符串到双精度再到字符串的往返处理而不会出现精度损失的双精度值。如果双精度值无法以这种方式往返,则事务或查询会失败。