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

未知层级嵌套JSON中用jq双select筛选dog下breed值的方法问询

递归筛选嵌套JSON中指定路径的字段值

需求说明

给定层级不固定的嵌套JSON,需要筛选出所有**属于dog节点(dog的递归层级未知,breed是dog的子节点或孙节点)**的breed字段值,组成数组。预期返回结果为["one","two"]。

问题排查

之前尝试的jq命令未命中核心逻辑:要么只检查dog节点本身是否包含breed(忽略了dog的子节点里的breed),要么遍历逻辑有误,导致无法覆盖dog下的多层嵌套场景。

解决方案

使用以下jq命令即可实现需求:

jq '[.. | .dog? // empty | .. | .breed? // empty]' myfile.json

命令解释

  • ..:递归遍历JSON中的所有节点
  • .dog? // empty:筛选出所有包含dog键的对象,提取dog对应的值;若节点不含dog键则忽略(// empty排除空值)
  • 再次使用..:遍历每个dog对象下的所有子节点
  • .breed? // empty:提取所有breed字段的值;若节点不含breed键则忽略
  • 外层[]:将所有提取到的breed值包装为数组

测试数据

将以下内容保存为myfile.json:

{
  "alpha": {
    "this": {
      "dog": {
        "breed": "one",
        "colors": {
          "eyes": "blue"
        }
      }
    }
  },
  "beta": {
    "dog": {
      "crazy": {
        "world": {
          "breed": "two",
          "colors": {
            "eyes": "blue"
          }
        }
      }
    }
  },
  "charlie": {
    "format": {
      "bird": {
        "boat": {
          "breed": "three",
          "colors": {
            "eyes": "blue"
          }
        }
      }
    }
  }
}

执行命令后,输出结果为:

["one","two"]

内容的提问来源于Stack Exchange,提问作者Art Vanderlay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:02:50