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

如何在Bash中正确读取cURL请求返回的JSON数组

问题描述

通过cURL请求并经jq处理后得到如下JSON数组:

[
  { 
    "first_name" : "John",
    "last_name" : "Doe"
  },
  { 
    "first_name" : "bat",
    "last_name" : "man"
  }
]

尝试用以下代码遍历数组:

item_list=`curl "https://linkhere.com" | jq`

for item in ${item_list[@]}; do 
    echo "item is $item"
done

但输出会将JSON的每个元素拆分成单独项,结果如下:

item is [
item is { 
item is "John":
item is "Doe"
item is }, 
... 

需要正确遍历数组中的每个对象,提取并存储first_name和last_name的值。

正确处理方式

方式1:直接提取字段并遍历

让jq将每个对象的first_name和last_name输出为逗号分隔的字符串,再用while read拆分读取:

curl "https://linkhere.com" | jq -r '.[] | "\(.first_name),\(.last_name)"' | while IFS=, read -r first last; do
    # 直接使用变量first和last
    echo "名:$first,姓:$last"
    # 示例:将姓名存入数组
    # full_names+=("$first $last")
done
  • -r:输出原始无引号的字符串
  • .[]:遍历JSON数组的每个元素
  • "\(.first_name),\(.last_name)":将两个字段用逗号拼接,便于read命令拆分

方式2:逐个处理JSON对象

如果需要保留对象的完整结构,让jq输出单行格式的单个对象,再循环解析每个对象:

curl "https://linkhere.com" | jq -c '.[]' | while read -r item_json; do
    first_name=$(echo "$item_json" | jq -r '.first_name')
    last_name=$(echo "$item_json" | jq -r '.last_name')
    echo "名:$first_name,姓:$last_name"
    # 后续业务逻辑
done
  • -c:输出紧凑的单行JSON,避免换行导致的错误拆分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:10:22