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

Shell解析多模块JSON避免变量覆盖,生成组合值的方法

问题:解析多模块JSON并生成每个模块的组合值

我已掌握解析含空格的单结构JSON的方法,但遇到新问题:存在多个结构相同但值不同的JSON模块时,最后一个模块的值会覆盖之前的,需要输出每个模块中WorkspaceName和ReportFileName的组合值。

测试用JSON示例

{
  "WorkspaceName":"aaa bbb ccc ddd eee",
  "ReportFileName":"xxx yyy zzz",
  "StageName":"sit uat prod"
},
{
  "WorkspaceName":"1111 2222 3333 4444 5555",
  "ReportFileName":"6666 7777 8888",
  "StageName":"sit1 uat1 prod1"
}

注意:上述JSON需包裹在数组[]中才符合标准格式,否则无法被专业工具正常解析,修正后应为:

[
  {
    "WorkspaceName":"aaa bbb ccc ddd eee",
    "ReportFileName":"xxx yyy zzz",
    "StageName":"sit uat prod"
  },
  {
    "WorkspaceName":"1111 2222 3333 4444 5555",
    "ReportFileName":"6666 7777 8888",
    "StageName":"sit1 uat1 prod1"
  }
]

尝试的Shell脚本(main.sh)

InitialFile=$WORKSPACE/deployment/configuration/Initial.json
eval $(sed -n -e 's/^.*"\(.*\)":\(".*"\).*$/\1=\2/p' $InitialFile)

ConfigFile="$WorkspaceName"_"$ReportFileName"

echo The Config File is_$ConfigFile

当前结果与期望结果

  • 当前结果:仅输出最后一个模块的组合值
    The Config File is_1111 2222 3333 4444 5555_6666 7777 8888
    
  • 期望结果:输出所有模块的组合值
    The Config File is_aaa bbb ccc ddd eee_xxx yyy zzz
    The Config File is_1111 2222 3333 4444 5555_6666 7777 8888
    

解决方案

使用jq工具(专门的JSON处理工具,Jenkins环境通常可通过插件或全局工具配置添加)来遍历每个JSON对象并提取所需字段,避免eval和sed处理JSON的局限性。

修正后的main.sh脚本:

InitialFile="$WORKSPACE/deployment/configuration/Initial.json"

# 遍历每个JSON对象,直接输出拼接后的结果
jq -r '.[] | "The Config File is_\(.WorkspaceName)_\(.ReportFileName)"' "$InitialFile"

# 若需将结果保存为变量供后续测试使用,可按如下方式:
# 读取所有组合值到数组
readarray -t config_files < <(jq -r '.[] | "\(.WorkspaceName)_\(.ReportFileName)"' "$InitialFile")

# 遍历数组执行后续测试逻辑
for file in "${config_files[@]}"; do
  echo "Processing config file: $file"
  # 此处添加你的测试操作
done

脚本说明

  1. 修正JSON格式:确保原始JSON包裹在数组[]中,这是多对象JSON的标准结构,也是jq能正确遍历的前提。
  2. jq命令解析:
    • .[]:遍历数组中的每个JSON对象
    • "\(.WorkspaceName)_\(.ReportFileName)":提取指定字段并拼接成所需格式
    • -r:输出原始字符串(不带JSON默认的引号)
  3. 变量保存:使用readarray将所有组合值存入数组,方便后续测试流程中逐个调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:40:49