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

如何使用jq将JSON对象列表合并为单个大对象?

如何将jq输出合并为单个对象?

问题背景

现有如下格式的JSON数组数据:

[
{
  "sys_replace_on_upgrade": "false",
  "initial_state": "false",
  "sys_mod_count": "0",
  "sys_updated_on": "2020-09-02 13:48:39",
  "sys_tags": "",
  "state_label": "Authorize",
  "sys_class_name": "sttrm_state",
  "state_sequence": "3",
  "sys_id": "13fc0801c343101035ae3f52c1d3ae77",
  "sys_update_name": "sttrm_state_13fc0801c343101035ae3f52c1d3ae77",
  "sys_updated_by": "admin",
  "sys_created_on": "2020-09-02 13:48:39",
  "sys_name": "Authorize",
  "state_value": "-3",
  "sys_customer_update": "false",
  "sys_created_by": "admin",
  "sys_policy": ""
},
...
]

使用当前jq命令处理后,输出是多个独立的小对象:

jq '.result[]|{(.sys_name) : .state_value}' states.json

输出结果:

{
  "Authorize": "-3"
}
{
  "New": "-5"
}
{
  "Closed": "3"
}
{
  "Review": "0"
}
...

但实际需要将所有键值对合并为单个大对象,格式如下:

{
  "Authorize": "-3" ,
  "New": "-5",
  "Closed": "3",
  "Review": "0", 
...
}

修改后的jq命令

只需将当前命令用合并操作整合所有小对象即可,推荐两种实用方式:

方式1:使用reduce遍历合并

jq '.result | reduce .[] as $item ({}; . + {($item.sys_name): $item.state_value})' states.json
  • 逻辑:从空对象{}起始,遍历数组每个元素,逐个将元素生成的键值对合并到结果对象中。

方式2:使用map+add批量合并

jq '.result | map({(.sys_name): .state_value}) | add' states.json
  • 逻辑:先用map把数组每个元素转换成单个键值对的小对象,再用add将所有小对象合并为一个大对象。

两种方式都能得到目标格式的单个对象,可根据习惯选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:52:49