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

如何在Shell脚本中从curl响应提取数组并遍历键值对?

将curl响应中的交易数据存入Shell数组并遍历

1. 修正jq命令的拼写错误

你当前的jq命令存在拼写错误:tansaction应为transaction,这是正确提取数据的前提。

2. 调整jq输出格式,适配Shell数组

要让输出能被Shell安全读取为数组,需将每个[timestamp, value]对单独输出一行,并通过@sh过滤器自动处理特殊字符和引号,避免解析错误:

curl "$url" | jq -r '.data[].data.transaction[] | @sh'

该命令会输出类似以下格式的结果:

'timestamp1' 'value1'
'timestamp2' 'value2'
'timestamp3' 'value3'
'timestamp4' 'value4'

3. 将输出存入Shell数组

使用bash内置的mapfile(或等价的readarray)命令,把jq的输出直接存入数组,-t参数会自动去除每行末尾的换行符:

mapfile -t transactions < <(curl "$url" | jq -r '.data[].data.transaction[] | @sh')

这里的< <(command)是进程替换语法,让mapfile直接读取命令的输出结果。

4. 遍历数组并处理每个键值对

遍历数组时,可以用jq直接拆分每个元素的时间戳和值,避免使用eval带来的安全风险:

for item in "${transactions[@]}"; do
    timestamp=$(echo "$item" | jq -r '.[0]')
    value=$(echo "$item" | jq -r '.[1]')
    # 替换为你的实际操作逻辑
    echo "处理记录:时间戳=$timestamp,值=$value"
done

完整脚本示例

#!/bin/bash

# 替换为你的目标URL
target_url="https://example.com/api/transactions"

# 获取数据并写入数组
mapfile -t transactions < <(curl "$target_url" | jq -r '.data[].data.transaction[] | @sh')

# 遍历处理每一条交易数据
for item in "${transactions[@]}"; do
    timestamp=$(echo "$item" | jq -r '.[0]')
    value=$(echo "$item" | jq -r '.[1]')
    
    # 这里添加你的业务操作,比如写入文件、调用其他脚本等
    echo "已处理:时间戳[$timestamp],对应值[$value]"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:25:38