JSON 扁平化
把嵌套 JSON 展开成扁平键值对,也可以反向还原(unflatten):支持自定义分隔符、数组展开开关与下标写法,并提示分隔符冲突。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
转换设置
键里含有分隔符会报错;还原时若某个对象的键是连续的 0..n-1,会自动还原成数组。
结果
这个工具能做什么
- 把嵌套配置、接口响应压成一层键值对,方便塞进只支持扁平结构的表格、环境变量或埋点字段。
- 给 Elasticsearch、日志系统这类需要 a.b.c 路径的地方生成字段名,数组会展开成 a[0]、a[1]。
- 反向操作同样常用:从埋点表、字典里读回扁平的键,一键还原成嵌套 JSON 再贴回代码。
- 排查数据问题时先看清单:叶子数量与最大层级一眼可见,能快速判断结构是不是比预期深了一层。
示例
输入
{"user":{"name":"Ada","tags":["math","code"]},"active":true}输出
{
"user.name": "Ada",
"user.tags[0]": "math",
"user.tags[1]": "code",
"active": true
}反过来把上面这份扁平对象贴进「还原」,会得到原来的嵌套结构;数组下标键是连续的 0、1,所以能自动还原成数组。
常见问题
键里本身带点号怎么办?
默认分隔符是点号,键里再出现点号就会和路径分隔符混淆,展开后无法可靠还原,因此会直接报错。可以先把分隔符换成下划线、斜杠等不会出现在键里的字符,或者先给键改名。
数组能选择写法吗?
可以。默认是方括号写法 a[0]、a[1],适合 Elasticsearch 这类路径;切成「下标」后变成 a.0、a.1,适合当作普通字段名使用。两种写法都能被「还原」识别回数组。
数组不展开会怎样?
关闭「展开数组」后,数组整体序列化成 JSON 字符串当作一个叶子值,例如 [1,2] 会变成 "[1,2]"。适合数组内容不需要单独检索、只想原样搬运的场景。
空对象、空数组和层级上限怎么处理?
空对象和空数组没有子项,会被当成叶子写成 "{}" 和 "[]";默认最大层级 64,超过的部分整体序列化成 JSON 字符串,避免畸形数据把展开过程撑爆。
还原时数组和对象的判断规则是什么?
还原后如果某个对象的所有键都是 0..n-1 的连续数字,就转成数组;只要有一个键不是数字或数字不连续(例如只有 0 和 2),就保持对象。这个规则让扁平化与还原可以来回切换,但也意味着形如 {"a.0":1} 的输入会被还原成数组 [1]。
关键词:json flattenunflattenflat jsonkey pathnested jsondelimiterJSON 扁平化扁平键值对展开嵌套还原 JSON