如何使用jq将按___分割的扁平键值对转为嵌套JSON对象
解决方案
你之前尝试用map、split和|=没得到预期结果,主要是因为没有处理多层级路径的自动叠加逻辑,用jq内置的setpath搭配reduce可以直接解决这个问题,不用手动实现层级嵌套,具体命令如下:
jq 'reduce to_entries[] as $item ({}; . + setpath($item.key | split("___"); $item.value))' 你的输入文件路径
命令逻辑说明
- 先通过
to_entries把原扁平JSON对象转换为键值对数组,每个元素结构为{"key": "原键名", "value": "原值"} - 用
reduce遍历所有键值对,初始结果设置为空对象{} - 对每个键值对,将键名按
___拆分为嵌套路径数组,调用setpath给当前结果对象的对应路径赋值 - 所有键值对遍历完成后,直接输出最终的嵌套结构
执行上述命令后,输出结果和你给出的预期结构完全一致。
内容的提问来源于stack exchange,提问作者KargWare
相关产品推荐
相关产品推荐

