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

求助:修复Shell脚本实现Checkmarx扫描结果转JSON格式

问题:将Checkmarx扫描结果文本转换为JSON格式

原始输入文本(存储在Checkmarx_Json_Data.txt)

High Severity Results: 0
Medium Severity Results: 1
Low Severity Results: 2
Information Severity Results: 0
Scan Results Location: Https://www.checkmarx.abc.com/cxwebclient/viewermain.aspx?scanid=12345&projectid=1234

期望输出的JSON格式

{
"High Severity Results" : "0",
"Medium Severity Results" : "1",
"Low Severity Results" : "2",
"Information Severity Results" : "0",
"Scan Results Location" : "Https://www.checkmarx.abc.com/cxwebclient/viewermain.aspx?scanid=12345&projectid=1234"
}

错误的尝试脚本

用户尝试的Shell脚本因逻辑问题生成了错误的JSON:

file="Checkmarx_Json_Data.txt"
checkmarxDataNew="$(cat Checkmarx_Json_Data.txt)"
while IFS= read -r line || [[ -n "$line" ]]; do
  for val in $line
  do
    echo "\"${val//:/\" : \"}\"" >> ACM_BQ_JSON_Response.json
  done
done < "$file"

错误输出

脚本将每行按空格拆分,导致键名被拆分为单个单词,且URL中的冒号被错误替换:

"checkmarx" : {
"High"
"Severity"
"Results":""
"0"
"Medium"
"Severity"
"Results":""
"1"
"Low"
"Severity"
"Results":""
"2"
"Information"
"Severity"
"Results":""
"0"
"Scan"
"Results"
"Location":""
"Https":"//www.checkmarx.ford.com/cxwebclient/viewermain.aspx?scanid=2500093&projectid=28069"
}

错误原因分析

  1. for val in $line会默认按空格拆分每行内容,破坏了包含空格的键名(如High Severity Results)。
  2. 直接替换所有冒号的逻辑错误,导致URL中的https://冒号被错误转换为键值对。

修复后的解决方案

方案1:使用awk(简洁高效)

awk可以方便地按指定分隔符分割每行,保留键名中的空格:

# 清空目标文件
> ACM_BQ_JSON_Response.json
# 写入JSON开头
echo "{" >> ACM_BQ_JSON_Response.json
# 处理每行,按": "分割键和值,生成JSON格式行
awk -F': ' '{printf "\"%s\" : \"%s\",\n", $1, $2}' Checkmarx_Json_Data.txt >> ACM_BQ_JSON_Response.json
# 移除最后一行的末尾逗号(避免JSON格式错误)
sed -i '$ s/,$//' ACM_BQ_JSON_Response.json
# 写入JSON结尾
echo "}" >> ACM_BQ_JSON_Response.json

方案2:纯Shell实现(无需awk依赖)

通过字符串分割提取键和值:

> ACM_BQ_JSON_Response.json
echo "{" >> ACM_BQ_JSON_Response.json
while IFS= read -r line; do
    # 定位第一个冒号的位置
    colon_pos=$(expr index "$line" ':')
    # 提取完整键名(冒号前的内容)
    key="${line:0:colon_pos-1}"
    # 提取值(冒号后跳过空格的内容)
    value="${line:colon_pos+1}"
    # 写入JSON行
    echo "\"$key\" : \"$value\"," >> ACM_BQ_JSON_Response.json
done < Checkmarx_Json_Data.txt
# 移除最后一行的逗号
sed -i '$ s/,$//' ACM_BQ_JSON_Response.json
echo "}" >> ACM_BQ_JSON_Response.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:45:01