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

如何用jq将JSON数据中的时间值按ID分组为数组?

用jq实现按id分组聚合time值数组

没问题,用jq的几个核心函数组合就能轻松搞定这个分组需求,一行命令就能出结果!

核心命令

假设你的原始JSON数据保存在input.json文件中,运行以下命令:

jq 'group_by(.id) | map({key: .[0].id, value: [.[].time]}) | from_entries' input.json

分步解释

我拆解开给你讲每个步骤的作用,方便理解:

  • group_by(.id):先把原始数组按id字段分组,会得到一个二维数组,每个子数组里都是相同id的对象。比如你的数据会变成:
    [
      [{"id":"abc","time":34},{"id":"abc","time":45}],
      [{"id":"def","time":25}]
    ]
    
  • map({key: .[0].id, value: [.[].time]}):遍历每个分组,把每个分组转换成{key: 分组的id, value: 该组所有time值组成的数组}的结构。这一步后数据会变成:
    [
      {"key":"abc","value":[34,45]},
      {"key":"def","value":[25]}
    ]
    
  • from_entries:最后把这个键值对数组转换成标准的JSON对象,也就是你想要的最终格式:
    {
      "abc": [34,45],
      "def": [25]
    }
    

直接处理管道输入

如果不想存文件,也可以直接通过管道传数据,比如:

echo '[ { "id": "abc", "time": 34 }, { "id": "def", "time": 25 }, { "id": "abc", "time": 45 } ]' | jq 'group_by(.id) | map({key: .[0].id, value: [.[].time]}) | from_entries'

这个方案完全用jq原生函数实现,不需要额外编程语言,我日常处理这类JSON聚合需求经常用,非常顺手~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:17:33