如何使用jq扁平化JSON文件以适配遗留程序需求
用jq扁平化JSON中的指定嵌套字段
先看你提供的输入JSON结构:
[ { "field1":10, "field2":20, "msg": { "a":1, "b":2, "c":3 } } ]
下面分两种场景给出实现命令:
1. 保留原msg字段的情况
执行以下jq命令,会把msg.a和msg.b提取为扁平化字段,同时保留原嵌套结构:
jq 'map(. + {"msg.a": .msg.a, "msg.b": .msg.b})' input.json
输出结果:
[ { "field1": 10, "field2": 20, "msg": { "a": 1, "b": 2, "c": 3 }, "msg.a": 1, "msg.b": 2 } ]
2. 移除原msg字段的情况
如果不需要保留原嵌套的msg结构,用下面的命令删除它:
jq 'map(. + {"msg.a": .msg.a, "msg.b": .msg.b} | del(.msg))' input.json
输出结果:
[ { "field1": 10, "field2": 20, "msg.a": 1, "msg.b": 2 } ]
命令解释
map(...):遍历JSON数组中的每个对象. + {"msg.a": .msg.a, "msg.b": .msg.b}:把原对象和新生成的扁平化字段合并del(.msg):删除原嵌套的msg字段(可选)
内容的提问来源于stack exchange,提问作者Tony Ennis
相关产品推荐
相关产品推荐

