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

如何用jq对未知键对应的值进行求和计算?

用jq实现JSON数组键值累加求和

需求说明

给定一个包含多个JSON对象的数组,需要生成一个新的JSON对象,将数组中所有对象的相同键对应的值累加,最终得到每个键的总和。

示例输入

[
  {
    "a": 10,
    "b": 20
  },
  {
    "a": 11,
    "c": 30
  },
  {
    "b": 21,
    "c": 31
  }
]

示例输出

{
  "a": 21,
  "b": 41,
  "c": 61
}

jq实现方案

可以直接用jq的内置函数完成这个需求,核心思路是遍历数组中的每个对象,将所有键值对合并并累加对应值:

jq 'reduce .[] as $item ({}; reduce ($item | to_entries[]) as $entry (.; .[$entry.key] += $entry.value))' input.json

命令解释

  • reduce .[] as $item ({}; ...):遍历输入数组的每个元素($item),初始值设为一个空对象{}
  • reduce ($item | to_entries[]) as $entry (.; ...):把每个对象转换为键值对数组(比如{"a":10}会转成[{"key":"a","value":10}]),再遍历这些键值对
  • .[$entry.key] += $entry.value:在结果对象中,对当前键对应的值进行累加,不存在的键会自动创建并赋值为对应值

如果是在命令行直接输入JSON内容,也可以用管道执行:

echo '[ {"a":10,"b":20}, {"a":11,"c":30}, {"b":21,"c":31} ]' | jq 'reduce .[] as $item ({}; reduce ($item | to_entries[]) as $entry (.; .[$entry.key] += $entry.value))'

其他实现方式(可选)

如果没有jq,也可以用Python快速实现,写个简单脚本即可:

import json
import sys

data = json.load(sys.stdin)
result = {}
for item in data:
    for k, v in item.items():
        result[k] = result.get(k, 0) + v

print(json.dumps(result, indent=2))

使用方式:

python sum_keys.py < input.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:42:09