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

GitLab CI中不使用jq从JSON文件提取键值对的实现方法

在无jq的GitLab CI中解析JSON提取键值对

既然没办法用jq,咱们可以用bash自带的字符串处理和文本操作工具来实现需求。这里给你调整后的GitLab CI脚本,能直接输出你想要的格式:

script:
  - |
    # 将JSON内容处理为无换行无空格的单行格式
    compact_json=$(tr -d '\n ' < "$myfile")
    # 移除首尾的大括号
    kv_content=${compact_json#\{}
    kv_content=${kv_content%\}}
    # 按逗号分割成单个键值对
    IFS=',' read -ra kv_pairs <<< "$kv_content"
    # 遍历每个键值对并格式化输出
    for pair in "${kv_pairs[@]}"; do
        # 按冒号分割键和值
        IFS=':' read -r raw_key raw_value <<< "$pair"
        # 去掉键和值周围的双引号
        key=${raw_key//\"/}
        value=${raw_value//\"/}
        # 输出目标格式
        echo "\"Key is $key and value is $value\""
    done

脚本工作原理拆解:

  1. 压缩JSON格式:用tr -d '\n '把原JSON里的换行和空格全部移除,避免换行导致的逐行读取问题,得到紧凑的单行JSON字符串。
  2. 清理首尾符号:通过${var#\{}}和${var%\}}两个字符串截取操作,去掉首尾的{和},只保留键值对部分。
  3. 分割键值对:设置IFS=','(内部字段分隔符),把处理后的内容按逗号分割成数组,每个元素就是一个"key":"value"格式的字符串。
  4. 提取键和值:对每个键值对,再用IFS=':'分割成键和值的原始字符串,然后用${var//\"/}把双引号全部替换为空,得到干净的键和值。
  5. 格式化输出:最后按照你想要的格式拼接字符串并打印。

注意事项:

这个方案适用于结构简单、无嵌套、键值字符串不含未转义的逗号/冒号的JSON文件。如果你的JSON有更复杂的结构(比如嵌套对象、数组),或者字符串里包含特殊字符,这种基础的文本处理可能会失效——不过在不能安装jq的限制下,这是最实用的替代方案了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:55:14