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

如何使用JQ按相同索引打印两个数组的对应值?

用jq实现关联数组元素的逐行配对输出

问题描述

有两个通过索引关联的数组timestamps和values,同一索引位置的元素一一对应(如timestamps[0]对应values[0]),示例输入JSON如下:

{"timestamps": ["1730135460000", "1730137620000"], "values" : ["15", "23"]}

需要输出的格式为每一行对应一对元素:

1730135460000 15
1730137620000 23

当前执行的错误命令是:

echo '{"timestamps": ["1730135460000", "1730137620000"], "values" : ["1", "2"]}' | jq -r '[ .timestamps[], .values[] ] | @tsv'

得到的错误输出是把所有元素排成了一行:

1730135460000 1730137620000 15 23

解决方案

方法1:使用transpose转置数组

transpose可将二维数组的行和列互换,正好能把两个数组的对应索引元素配对:

echo '{"timestamps": ["1730135460000", "1730137620000"], "values" : ["15", "23"]}' | jq -r '[.timestamps, .values] | transpose[] | @tsv'
  • 步骤说明:
    1. [.timestamps, .values]将两个数组组合成二维数组:[["t0", "t1"], ["v0", "v1"]]
    2. transpose转置后得到配对的子数组:[["t0", "v0"], ["t1", "v1"]]
    3. []展开每个子数组,@tsv将子数组元素用制表符分隔输出

方法2:按索引遍历配对

通过range生成索引序列,逐个取出对应位置的元素拼接输出:

echo '{"timestamps": ["1730135460000", "1730137620000"], "values" : ["15", "23"]}' | jq -r 'range(0; .timestamps | length) as $i | "\(.timestamps[$i]) \(.values[$i])"'
  • 步骤说明:
    1. range(0; .timestamps | length)生成从0到数组长度-1的索引
    2. 遍历每个索引$i,取出对应位置的两个元素,用空格拼接成字符串输出

两种方法都能得到预期的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:02