Skip to main content
CheckTown
数据工具

JSON 扁平化:在嵌套与扁平之间来回转换

发布于 阅读约 5 分钟
本文目录

什么是 JSON 扁平化?

JSON 扁平化会使用点号路径把深度嵌套的 JSON 对象转换为扁平的键值结构。原对象中的每个叶子值都会获得一个唯一的路径,比如 'user.address.city',用来描述它在层级中的位置。

与之相反的操作是反扁平化,它会根据点号路径重建出原有的嵌套结构。扁平化和反扁平化配合使用,让你能够在嵌套表示和扁平表示之间自由转换 JSON,而不会丢失任何数据。

JSON 扁平化的工作原理

扁平化算法会递归遍历 JSON 树,在深入嵌套对象和数组的过程中逐步构建路径字符串。

  • 递归遍历——算法会遍历对象中的每一个键,并将每个键追加到一个不断增长的、以点号分隔的路径上
  • 数组下标表示法——数组元素使用方括号表示法(比如 'items[0].name'),以在扁平化输出中保留其位置
  • 叶子收集——当到达某个基本值(字符串、数字、布尔值、null)时,就将完整路径和该值作为一个扁平的键值对存储起来

免费试用 —— 无需注册

扁平化或反扁平化 JSON →

何时使用 JSON 扁平化

每当你需要在仅支持扁平结构的系统中处理嵌套数据,或需要比较复杂结构时,扁平化的 JSON 都很有用。

  • 数据库存储——无需变更表结构,即可将嵌套的配置或元数据存入扁平的键值表中
  • CSV 导出——将嵌套的 JSON 记录转换为扁平行,适合导入电子表格或以表格形式展示
  • 配置比较——将两个配置文件扁平化,然后比对扁平后的键,快速找出哪些嵌套值发生了变化

常见问题

扁平化会保留数据类型吗?

会。所有基本值(字符串、数字、布尔值、null)都会被原样保留。数组会变成带下标的路径(比如 'items[0]'),嵌套对象会变成以点号分隔的路径。反扁平化时,会根据这些路径重建出原有的类型。

遇到非常深的嵌套会怎样?

扁平化工具能处理任意深度的嵌套。非常深的对象会产生很长的路径字符串,但在功能上没有限制。如果在意性能,大多数实现会采用迭代方式,以避免在数千层嵌套时出现调用栈问题。

我能扁平化含有重复键的 JSON 吗?

按照规范,JSON 不允许在同一层级出现重复键。如果你的解析器接受重复键,那么每个键只有最后一个值能在解析后保留下来。扁平化工具处理的是解析后的对象,因此在扁平化开始前,重复键就已经被解决了。

相关工具