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

如何使用jq将JSON嵌套子对象的双引号替换为单引号

问题场景

有一份待导入数据库的JSON文本文件,预处理已基本完成,剩余格式调整需求:使用jq工具,将JSON所有嵌套层级子对象、对应值的双引号替换为单引号,顶层键值的双引号保留。

示例输入

{"foo":"bar","ping":{"pong":"ping-pong","n":[{"a":1},{"b":2}]},"alpha":"beta","hello":"there!","you":"2"}

期望输出

{"foo":"bar","ping":{'pong':'ping-pong','n':[{'a':1},{'b':2}]}, "alpha":"beta","hello":"there!","you":"2"}
实现方案

首先明确:最终输出不是标准JSON格式(标准JSON仅支持双引号包裹键和字符串值),仅适配特定数据库导入的自定义格式要求。

执行以下jq命令即可完成转换:

jq -c '
to_entries | map(
  if .value | type | IN("object", "array") then
    (.key | tojson) + ":" + ((.value | tojson) | gsub("\"";"'\\''"))
  else
    (.key | tojson) + ":" + (.value | tojson)
  end
) | join(",") | "{\(.)}"
' target.json

命令逻辑说明

  • -c 参数指定输出紧凑无缩进格式,和示例输出格式匹配
  • to_entries 将顶层JSON对象拆分为由{key: 键名, value: 键值}组成的数组,方便逐一枚举顶层字段处理
  • 对每个顶层字段判断值类型:
    • 如果值是对象或数组(即存在嵌套结构),先将嵌套值序列化为标准JSON字符串,再全局替换字符串内所有双引号为单引号
    • 如果值是字符串、数字、布尔值等基础类型,直接保留标准JSON的双引号格式
  • 最后将处理完的所有键值对用逗号拼接,外层包裹大括号,得到最终结果

注意:转换后的内容无法被标准JSON解析器识别,仅可用于指定的非标准导入场景。

内容的提问来源于stack exchange,提问作者M Ahmad Mujtaba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:18:17