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

如何使用Shell脚本动态迭代和解析JSON数组

用Shell脚本结合jq解析JSON数组并生成指定结构

核心思路

直接借助jq的JSON构造能力生成目标结构,避免手动拼接Shell字符串带来的语法风险,同时分别迭代product和inventory两个数组完成处理。

完整实现脚本

#!/bin/bash

inputFile="product.json"

# 处理product数组,生成指定格式的JSON
echo "=== 开始处理product数组 ==="
jq -c '.product[] | {
    pid: .productID,
    pname: .productName,
    pd: {
        info: .details.info,
        desc: .details.desc
    }
}' "$inputFile" | while read -r product_json; do
    echo "生成的product请求体: $product_json"
    # 替换为实际的API调用逻辑
    # curl -X POST -H "Content-Type: application/json" -d "$product_json" https://your-api-endpoint/product
done

# 处理inventory数组,生成对应格式的JSON(可按需调整键名)
echo -e "\n=== 开始处理inventory数组 ==="
jq -c '.inventory[] | {
    iid: .id,
    iname: .name,
    config: .configuration
}' "$inputFile" | while read -r inventory_json; do
    echo "生成的inventory请求体: $inventory_json"
    # 替换为实际的API调用逻辑
    # curl -X POST -H "Content-Type: application/json" -d "$inventory_json" https://your-api-endpoint/inventory
done

关键细节说明

  • jq构造JSON:直接通过jq的对象语法生成目标结构,无需手动拼接字符串,能自动处理字段值中的特殊字符(如引号、空格)。
  • 紧凑输出:jq -c参数输出紧凑格式的JSON,方便Shell读取和传递。
  • 安全读取:使用read -r读取JSON内容,防止反斜杠等特殊字符被意外转义。

备选方案:提取单独字段到Shell变量

如果必须将字段值单独存入Shell变量再拼接JSON,可使用jq的原始输出模式:

#!/bin/bash

inputFile="product.json"

jq -r '.product[] | "\(.productID)\t\(.productName)\t\(.details.info)\t\(.details.desc)"' "$inputFile" | while IFS=$'\t' read -r pid pname info desc; do
    # 用jq的参数化构造生成JSON(比直接字符串拼接更安全)
    input=$(jq -n --arg pid "$pid" --arg pname "$pname" --arg info "$info" --arg desc "$desc" '{
        pid: $pid,
        pname: $pname,
        pd: {info: $info, desc: $desc}
    }')
    echo "生成的请求体: $input"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:15:40