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

如何使用jq将指定嵌套JSON转换为目标键值对格式?

解决jq转换JSON结构的问题

你的需求是将包含objects数组的原始JSON,转换为以设备标识(如gate01)为顶级键,内部以统计项ID为键、对应数值为值的结构。

你之前的命令问题在于:同时对.statistics[].id和.statistics[].value做数组展开,这会生成笛卡尔积,导致每个ID和所有数值错误配对,完全不符合预期。

正确的jq命令

方法一:用from_entries快速转换统计数组

这是最简洁的实现方式,先把每个统计项转成{key: .id|tostring, value: .value}的标准格式,再用from_entries将数组直接转为对象:

jq '.objects | map({key: .key, value: .statistics | map({key: .id|tostring, value: .value}) | from_entries}) | from_entries'

方法二:用reduce手动构建统计对象

如果需要更精细的控制逻辑,可以用reduce遍历每个统计项,逐步构建目标对象:

jq '.objects | map({(.key): reduce .statistics[] as $s ({}; . + {($s.id|tostring): $s.value})}) | add'

验证效果

用你的输入数据运行上述任一命令,都会得到你期望的输出:

{
  "gate01": {
    "18": 0.0,
    "89": 0,
    "91": 35.0,
    "20": 33.0
  },
  "gate02": {
    "18": 1.0,
    "89": 24290.0,
    "91": 110.0,
    "20": 97.0
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:14:59