如何使用jq将多键及嵌套数组数据合并为单个对象?
用jq将嵌套数组的键值对合并到顶层单个对象
核心命令
jq '. + reduce .key3[] as $item ({}; {($item.key4): $item.key5})' input.json
示例说明
标准输入JSON(需修正为合法格式,键和字符串值需加双引号)
{ "key1": "value1", "key2": "value2", "key3": [ {"key4": "value3", "key5": "value5"}, {"key4": "value4", "key5": "value6"}, {"key4": "valueN", "key5": "valueM"} ] }
执行命令后输出
{ "key1": "value1", "key2": "value2", "value3": "value5", "value4": "value6", "valueN": "valueM" }
命令拆解
.:保留原对象里的顶层键值对(key1、key2)reduce .key3[] as $item ({}; ...):遍历key3数组的每一项,以空对象为初始值,把每个数组项的key4值作为新键、key5值作为对应值,生成一个包含数组键值对的临时对象+:将原对象和临时对象合并,得到包含所有所需键值对的单个对象
注意事项
如果key3数组中存在重复的key4值,后面的项会覆盖前面的对应键值,这是JSON对象的固有特性。
内容的提问来源于stack exchange,提问作者vpas
相关产品推荐
相关产品推荐

