如何使用JQ将Bash多行变量转换为可用于Curl的JSON字符串
解决方案
步骤1:使用JQ将多行变量转换为合法JSON字符串
直接使用JQ的原始输入模式处理变量,自动完成所有特殊字符(换行、双引号、空格等)的转义,无需手动处理:
JSON_FPR_LOW=$(jq -R -s '.' <<< "$FPR_LOW")
参数说明:
-R:开启原始输入模式,不会把输入内容当做JSON解析,直接当做普通字符串处理-s:将所有输入内容(包括所有换行)合并为单个字符串处理- 注意
$FPR_LOW必须用双引号包裹,否则变量里的换行、连续空格会被Bash自动合并
步骤2:正确使用生成的字符串发起Curl请求
不建议手动拼接JSON结构,容易因为转义问题出错,推荐直接用JQ生成完整的请求体:
# 直接生成完整的请求体JSON,避免手动拼接出错 REQUEST_BODY=$(jq -R -s '{ "body": . }' <<< "$FPR_LOW") # 发起请求,直接传入生成的完整请求体即可 curl 你的其他请求参数 -d "$REQUEST_BODY" 你的接口地址
如果一定要单独使用JSON_FPR_LOW,请确保curl的参数用双引号包裹,且变量放在双引号内:
# 不推荐,手动拼接容易出错,仅做参考 curl 你的其他请求参数 -d "{ \"body\": $JSON_FPR_LOW }" 你的接口地址
验证方法
你可以执行以下命令查看转义后的效果,确认所有特殊字符都被正确转义:
echo "$JSON_FPR_LOW"
可以看到输出里的双引号会自动加反斜杠转义,换行符会转换为\n,完全符合JSON字符串的语法规范,不会出现请求格式异常。
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

