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

如何用jq将两个等长数组的内容转换为键值对?

解决方法

要把values和counts两个数组的元素一一对应生成键值对对象,你可以用以下两种jq实现方式:

方法一:通用写法(兼容所有jq版本)

jq '[.values, .counts] | transpose | map({key: .[0], value: .[1]}) | from_entries' input.json

步骤说明:

  • [.values, .counts]:把两个目标数组打包成一个二维数组,得到[["5","10","15","20","25"], [17,1014,22,9,11]]
  • transpose:将二维数组转置,变成[["5",17], ["10",1014], ["15",22], ["20",9], ["25",11]]
  • map({key: .[0], value: .[1]}):把每个子数组转换成{key: "5", value:17}这种符合from_entries要求的结构
  • from_entries:将上述结构的数组转换成最终的键值对对象

方法二:精简写法(jq 1.6及以上版本可用)

jq 1.6新增了zip函数,能直接把两个数组合并成配对的子数组,写法更简洁:

jq 'zip(.values, .counts) | from_entries' input.json

zip(.values, .counts)直接生成[["5",17], ["10",1014], ...],再通过from_entries直接转成对象。

你之前的命令为什么无效?

with_entries是用来修改已有对象的键值对条目的,比如给现有对象的键重命名、修改值,但你的原始数据是两个独立数组,根本不是对象的条目结构,所以用with_entries完全不对路,这就是之前尝试失败的原因。

内容的提问来源于stack exchange,提问作者André Letterer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:07