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

在Bash/JQ中将JSON转换为单引号包裹的字符串

解决方案

最优方案:使用JQ的@sh过滤器

@sh过滤器专门用于生成符合shell语法的字符串,会自动用单引号包裹内容,且保留原始JSON中的双引号不转义,完全匹配需求。

示例命令:

# 原始输入字符串(包含带双引号的value)
echo 'key1:value1,key2:"value with double quotes"' | jq -R '
  # 第一步:将key:value格式的字符串转换为JSON对象
  split(",") 
  | map(split(":"; 1) | {(.[0]): .[1]}) 
  | add 
  # 第二步:用@sh生成单引号包裹的字符串
  | @sh
'

输出结果:

'{"key1":"value1","key2":"value with double quotes"}'

替代方案1:Shell环境中直接包裹输出

如果不需要在JQ内部完成单引号包裹,可以在shell中直接捕获JQ的JSON输出,手动添加前后单引号:

echo "'$(echo 'key1:value1,key2:"value with double quotes"' | jq -R 'split(",") | map(split(":"; 1) | {(.[0]): .[1]}) | add')'"

替代方案2:JQ内手动处理转义并拼接单引号

如果无法使用@sh(比如旧版本JQ不支持),可以先将JSON对象转为字符串,替换掉自动转义的双引号,再拼接单引号:

echo 'key1:value1,key2:"value with double quotes"' | jq -R '
  split(",") 
  | map(split(":"; 1) | {(.[0]): .[1]}) 
  | add 
  | tostring 
  | gsub("\\\\\""; "\"") 
  | "'"'"'" + . + "'"'"'"
'

注:'"'"'是shell中插入单引号的写法,用于在JQ的字符串表达式中表示单引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:39:18