Bash中如何遍历curl返回的JSON数据并提取指定对象的value值
Bash 环境提取JSON指定字段的实现方法
处理JSON数据推荐使用专门的JSON解析工具jq,主流Linux发行版可通过对应包管理器直接安装(如Debian/Ubuntu执行apt install jq,CentOS/RHEL执行yum install jq)。
方法1:直接提取第二个对象的value值
你给出的JSON结构中data数组下标从0开始,第二个元素对应索引为1,直接执行以下命令即可提取:
# 提取value值(带JSON数值类型输出,结果为4) echo "$response" | jq '.data[1].value' # 提取纯数值存入变量(加-r参数输出原始字符串/数值) second_value=$(echo "$response" | jq -r '.data[1].value')
方法2:遍历加条件判断实现
可以通过遍历数组+条件判断的方式完成,适配两种判断场景:按位置匹配第二个元素,或者按name字段值匹配目标元素:
# 先获取data数组总长度 array_length=$(echo "$response" | jq '.data | length') # 遍历数组所有索引 for ((index=0; index<array_length; index++)); do # 按位置判断:匹配第二个元素(索引等于1) if [ $index -eq 1 ]; then target_value=$(echo "$response" | jq -r ".data[$index].value") echo "第二个对象的value值为:$target_value" break fi # 也可按字段值判断:匹配name为EFC的元素,取消下方注释即可使用 # current_name=$(echo "$response" | jq -r ".data[$index].name") # if [ "$current_name" = "EFC" ]; then # target_value=$(echo "$response" | jq -r ".data[$index].value") # echo "name为EFC的对象的value值为:$target_value" # break # fi done
注意:不推荐用grep、awk等文本工具硬解析JSON,特殊格式场景下很容易出现解析错误,
jq是Bash环境下处理JSON的最优选择。
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

