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

如何使用JQ统计每个对象中键值对出现次数,按member_id分组统计title数量

按member_id分组统计title出现次数的JQ实现方案

正确JQ语句

方案1:仅统计指定title(如foo),性能更优

jq 'map({id: .member_id, title: "foo", count: ([.loans[].media[] | select(.title == "foo")] | length)})[]' member.json

逻辑说明:

  • 直接遍历外层每一个用户对象,无需先拆分再回组
  • 统计单个用户下所有loans节点的media数组中,title等于foo的条目总数,直接构造输出对象
  • 末尾的[]用于把数组结果展开为逐行输出的独立对象,匹配预期的输出格式

方案2:通用多title全量分组统计,支持同时统计所有title的分组次数

jq 'map(.member_id as $m | .loans[].media[] | {id: $m, title: .title}) | group_by([.id, .title])[] | {id: .[0].id, title: .[0].title, count: length}' member.json

逻辑说明:

  • 先把所有media条目展开为带用户id和title的对象数组
  • 用group_by按[用户id, title]二元组作为分组键
  • 每个分组的长度即为对应id和title的出现次数,最后构造输出对象即可
  • 之前出现的报错是因为分组时未正确指定分组键的格式,导致JQ尝试对比不同类型的值进行排序分组触发类型不兼容错误

输出结果

运行上述任意语句针对提供的样例JSON,都可以得到预期输出:

{
  "id": 123,
  "title": "foo",
  "count": 2
}
{
  "id": 456,
  "title": "foo",
  "count": 1
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:24:01