toolgarden.xyz
EN

JSON Flatten / Unflatten

将嵌套 JSON / JSONC / JSON5 平铺为路径键,或从路径键还原成嵌套结构,浏览器本地处理,无需上传。

输入 JSON / JSONC / JSON5

输出结果

转换结果将显示在这里

工具说明

Flatten 把嵌套对象和数组改写为“路径到值”的一层对象,例如 user.address.city 变成单个 key。Unflatten 读取这些路径并重新建立容器,适合在不支持嵌套结构的表格、环境变量或键值存储之间搬运数据。

分隔符是格式的一部分。如果原始 key 本身包含同样的点号或自定义分隔符,展开后会产生歧义;数组索引也需要保留为数字路径段,才能在还原时创建数组而不是普通对象。

使用步骤

  1. 选择展开或还原

    Flatten 输入嵌套 JSON,Unflatten 输入以路径为 key 的一层对象。

  2. 确认路径分隔符

    使用与目标系统兼容且不会出现在原始 key 里的分隔符。

  3. 检查数组和空容器

    转换后重点核对数组索引、空对象、空数组及包含特殊字符的 key。

输入与输出示例

嵌套结构与路径键的对照。数组位置用方括号下标表示。

嵌套 JSON
{
  "user": {
    "name": "kit",
    "tags": ["a", "b"]
  }
}
平铺后
{
  "user.name": "kit",
  "user.tags[0]": "a",
  "user.tags[1]": "b"
}

支持范围与限制

两个方向
把嵌套结构平铺为路径键,或从路径键还原嵌套结构
路径表示
用点号连接对象层级,用下标表示数组位置,如 user.tags[0]
典型用途
把嵌套 JSON 塞进只接受扁平键值的地方:环境变量、表格列、部分配置系统
还原的前提
路径键必须格式规范。手工拼写的路径出错时无法正确还原层级
键名含点号
原始 key 里本身带点号时,平铺后无法区分层级边界,还原会出错
空对象与空数组
平铺后没有对应的叶子节点,还原时可能丢失这两种空容器

典型使用场景

  • 导出到表格列

    把嵌套配置展开成稳定路径列,便于筛选、对照和批量编辑。

  • 生成环境变量映射

    把层级配置变成一层键值对,再按部署系统的命名规则替换分隔符。

  • 把深层嵌套压平便于逐字段核对

    层级很深的配置平铺成路径列表后,可以逐行和另一份对照,比在树形结构里翻找更可靠。

使用前需要知道的事

  • 原 key 含分隔符时无法无损区分“key 的一部分”和“层级边界”。
  • 稀疏数组还原后可能包含空位置,序列化时这些位置通常表现为 null。
  • 空对象与空数组没有叶子值,具体能否保留取决于展开格式的占位规则。

相关概念

leaf value
递归结构中不再包含子成员的最终值,展开后每个路径通常指向一个叶子。
delimiter
连接路径段的字符,例如点号或大于号;必须与数据中的真实 key 区分。

常见问题

Flatten 和 Unflatten 分别做什么?
Flatten 把嵌套 JSON 变成 a.b.c 这样的路径键单层结构;Unflatten 则把路径键还原成嵌套对象。
平铺后的键是什么样的?
嵌套对象用点号连接,数组用下标表示,例如 user.tags.0,方便做配置项、i18n 词条或表格列。
处理会上传数据吗?
不会。平铺与还原都在浏览器本地完成,数据不会上传到服务器。
还原后为什么和原始结构不一样?
有两种常见原因:原始 key 里本身含点号,平铺后无法区分层级边界;以及原结构里有空对象或空数组,它们没有叶子节点可平铺,还原时就消失了。这两种情况都需要人工确认。
路径里的数组下标用什么表示?
用方括号,例如 `user.tags[0]`。手工书写路径时下标格式必须一致,否则还原时会把它当作普通的键名而不是数组位置。