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
脚本工作原理拆解:
- 压缩JSON格式:用
tr -d '\n '把原JSON里的换行和空格全部移除,避免换行导致的逐行读取问题,得到紧凑的单行JSON字符串。 - 清理首尾符号:通过
${var#\{}}和${var%\}}两个字符串截取操作,去掉首尾的{和},只保留键值对部分。 - 分割键值对:设置
IFS=','(内部字段分隔符),把处理后的内容按逗号分割成数组,每个元素就是一个"key":"value"格式的字符串。 - 提取键和值:对每个键值对,再用
IFS=':'分割成键和值的原始字符串,然后用${var//\"/}把双引号全部替换为空,得到干净的键和值。 - 格式化输出:最后按照你想要的格式拼接字符串并打印。
注意事项:
这个方案适用于结构简单、无嵌套、键值字符串不含未转义的逗号/冒号的JSON文件。如果你的JSON有更复杂的结构(比如嵌套对象、数组),或者字符串里包含特殊字符,这种基础的文本处理可能会失效——不过在不能安装jq的限制下,这是最实用的替代方案了。
内容的提问来源于stack exchange,提问作者Pedro Alves
相关产品推荐
相关产品推荐

