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

如何用jq通用美化打印含嵌套JSON字符串的任意键,无需指定键名?

问题

需要用jq工具美化打印包含嵌套JSON字符串的JSON数据,示例输入如下:

echo '{ "my_key": "my_val", "next_key": "next_val", "schema": "{\n  \"name\": \"bucket_name\"\n}" }'

期望输出:

{
  "my_key": "my_val",
  "next_key": "next_val",
  "schema": {
    "name": "bucket_name"
  }
}

当前方法需要硬编码指定键名(比如schema),还得修改原输入的转义字符,命令如下:

echo '{ "my_key": "my_val", "next_key": "next_val", "schema": "{\\n  \\"name\\\": \\"bucket_name\\\"\\n}" }' | jq '(.schema | fromjson) as $s | .schema = $s'

想找一种通用方法:无需指定键名、无需修改原输入JSON,自动识别所有值为JSON字符串的键并解析,实现整体美化打印。

通用解决方案

可以用jq的递归遍历和条件判断实现自动解析所有嵌套的JSON字符串值,原理是遍历每个元素,尝试解析字符串为JSON,成功就替换,失败则保留原值。

直接可用的命令

拿原输入直接执行这条命令就行:

echo '{ "my_key": "my_val", "next_key": "next_val", "schema": "{\n  \"name\": \"bucket_name\"\n}" }' | jq 'walk(if type == "string" then try fromjson catch . else . end)'

命令说明

  • walk(f):递归遍历JSON的每一个元素,对每个元素执行函数f
  • 条件判断部分:
    1. 先判断当前元素是不是字符串类型
    2. 如果是,尝试用fromjson解析成JSON对象/数组,解析成功就用解析后的值替换原字符串
    3. 如果解析失败(比如就是普通文本字符串),就保留原字符串不变

效果

执行后会自动识别所有值为合法JSON的字符串字段并解析,同时保留普通字符串,输出就是你想要的美化后的完整JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:12:25