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

如何在Bash脚本中迭代jq命令的JSON输出结果?

解决Bash中用jq解析测试矩阵JSON的字段提取与迭代问题

问题根源

你之前的jq命令输出的是多个独立的JSON对象,没有被包裹成数组,也没有逗号分隔,导致Bash无法直接按数组迭代。以下是两种实用的解决思路:


方案1:输出合法的JSON数组(方便后续JSON处理)

如果需要得到一个完整的、可被其他工具解析的JSON数组,用[]将提取的对象包裹起来:

jq '[.[] | {matrixId, state, details, device, webLink}]' test_matrix.json

这个命令会把所有提取的对象组合成一个标准JSON数组,自动添加逗号分隔符。


方案2:直接在Bash中迭代每个对象(更高效)

如果要直接在脚本里循环处理每个测试项,用-c参数让jq每行输出一个JSON对象,再配合Bash的while循环读取:

# 循环读取每个JSON对象
while read -r item; do
  # 提取单个字段(-r参数输出原始字符串,不带引号)
  matrixId=$(echo "$item" | jq -r '.matrixId')
  state=$(echo "$item" | jq -r '.state')
  details=$(echo "$item" | jq -r '.details')
  device=$(echo "$item" | jq -r '.device')
  webLink=$(echo "$item" | jq -r '.webLink')

  # 这里写你的业务逻辑,比如打印或处理字段
  echo "测试项ID: $matrixId,状态: $state,设备: $device"
done < <(jq -c '.[] | {matrixId, state, details, device, webLink}' test_matrix.json)

更高效的字段提取方式

避免多次调用jq,直接让jq把字段格式化为Bash可直接读取的字符串(用@sh转义特殊字符):

jq -r '.[] | [.matrixId, .state, .details, .device, .webLink] | @sh' test_matrix.json | while read -r matrixId state details device webLink; do
  echo "测试详情: $details"
  echo "查看链接: $webLink"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:35:14