如何使用jq将JSON数组元素合并为单个结果对象?
问题:用jq合并多个独立JSON对象为单个对象
我有如下格式的JSON文件:
{ "cases": [ {"id": "1", "count": 2, "ignore": "f"}, {"id": "2", "count": 7, "ignore": "o"}, {"id": "3", "count": 11, "ignore": "o"} ] }
执行命令 jq '.cases[] | { "\(.id)" : .count }' test.json 后,得到多个独立的JSON对象:
{ "1": 2} { "2": 7} { "3": 11}
但我需要合并为单个JSON对象:
{ "1": 2, "2": 7, "3": 11 }
请问如何通过jq实现此需求?
解决方案
你可以通过以下两种常用方式实现:
方法一:使用map+add
先将数组中的每个元素转换为目标键值对对象,再用add合并所有对象:
jq '.cases | map({"\(.id)": .count}) | add' test.json
方法二:使用reduce遍历合并
通过reduce遍历数组,逐步将每个元素的键值对合并到初始空对象中,处理大型数组时性能更优:
jq '.cases | reduce .[] as $item ({}; .[$item.id] = $item.count)' test.json
两种方式都能输出你需要的单个JSON对象。
内容的提问来源于stack exchange,提问作者Felix Dombek
相关产品推荐
相关产品推荐

