You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq将分组后的数组重塑为指定汇总格式?

用jq实现数组到目标结构的转换

嘿,这需求用jq处理起来非常直观,我给你两种可行的写法,其中一种简洁高效,另一种更偏过程式,你可以按需选择:

方法一:用from_entries(推荐,简洁易读)

这种方法利用jq内置的from_entries函数,专门用来把{key, value}结构的数组转换成键值对对象,搭配数组长度直接获取总Count:

完整jq命令

jq '{Count: length, Agents: (map({key: .Agents, value: .Count}) | from_entries)}'

逐段解释

  • length:直接读取输入数组的元素个数,刚好对应目标结构里的Count:7
  • map({key: .Agents, value: .Count}):把原始数组里的每个对象,转换成{key: "a", value:1}这种标准的键值对结构数组
  • from_entries:将上面的键值对数组直接转换为一个对象,也就是你要的"Agents": {"a":1, "b":50,...}部分

方法二:用reduce(过程式写法)

如果你想更清晰地看到每一步的累加过程,可以用reduce遍历数组,逐步构建目标对象:

完整jq命令

jq 'reduce .[] as $item ({Count:0, Agents:{}}; .Count +=1 | .Agents[$item.Agents] = $item.Count)'

逐段解释

  • 初始值{Count:0, Agents:{}}:先定义一个空的目标结构
  • .Count +=1:每遍历一个元素,就把Count加1
  • .Agents[$item.Agents] = $item.Count:把当前元素的Agents值作为键,Count值作为值,添加到Agents对象里

测试示例

假设你的原始数据存在data.json文件里,直接运行上面的命令就能得到你想要的结果:

输入(data.json):
[ { "Agents": "a", "Count": 1 }, { "Agents": "b", "Count": 50 }, { "Agents": "c", "Count": 25 }, { "Agents": "d", "Count": 1 }, { "Agents": "e", "Count": 4 }, { "Agents": "f", "Count": 4 }, { "Agents": "g", "Count": 4 } ]

输出:
{ "Count": 7, "Agents": { "a": 1, "b": 50, "c": 25, "d": 1, "e": 4, "f": 4, "g": 4 } }

内容的提问来源于stack exchange,提问作者BrandonH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:09:09