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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:18:02