如何使用JQ将含特殊字符的多行shell变量转换为JSON字符串
使用JQ将多行含特殊字符的Shell变量转为JSON字符串的方法
核心思路:利用jq内置的--arg参数自动处理变量转义的能力,无需手动处理特殊字符、换行符,就能生成完全合规的JSON字符串。
核心实现命令
如果需要直接输出纯JSON字符串,执行以下命令即可:
json_result=$(jq -n --arg input "$FPR_LOW" '$input')
参数说明:
-n参数:告诉jq不需要读取外部输入,直接生成输出内容--arg input "$FPR_LOW":将Shell变量$FPR_LOW的内容完整传入jq内部,赋值给jq变量$input,这一步jq会自动完成所有特殊字符转义处理,不需要人工干预- 最后的
$input:直接输出jq内部的$input变量,输出结果就是完全符合JSON规范的字符串
拓展用法:生成带指定Key的JSON对象
如果需要把内容放到JSON对象的指定字段里,可以直接修改jq的输出逻辑:
json_result=$(jq -n --arg fpr_low "$FPR_LOW" '{"FPR_LOW": $fpr_low}')
生成的结果示例:
{"FPR_LOW": "4 issues of 4 matched search query.\n\nIssue counts by category:\n\n J2EE Bad Practices: Leftover Debug Code => 1 Issues\n ApiApplication.java:23 (Structural)\n Poor Error Handling: Overly Broad Throws => 3 Issues\n controller/BanksController.java:27 (Structural)\n controller/BanksController.java:40 (Structural)\n controller/BanksController.java:51 (Structural)"}
注意事项
- 引用Shell变量的时候必须加双引号包裹,也就是
"$FPR_LOW",否则Shell会自动将多行内容的换行符替换为空格,同时拆分变量内容,导致传入jq的内容不完整 - 不需要手动对变量内容做任何转义处理,jq的
--arg机制会自动处理换行、双引号、反斜杠等所有JSON需要转义的特殊字符,不会出现格式错误
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

