You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JMESPath技术问询:如何在包含标量与列表的大型JSON中查找任意位置的指定键

使用JMESPath快速查找JSON任意层级的指定键

当然可以!JMESPath专门有语法解决这种不想写一大串嵌套路径的麻烦,不管你的JSON是多层对象嵌套,还是混着列表结构,都能轻松定位到你要的键值。

先看你给出的纯嵌套对象例子

你的示例JSON是:

{"a": {"b": {"c": {"d": {"e": {"f": {"g": {"key1": 3 }}}}}}}

不用写冗长的a.b.c.d.e.f.g.key1,用JMESPath的递归通配符..就能搞定——它会遍历所有层级的节点,匹配后面指定的键。

对应的表达式:

..key1

执行后会返回[3](返回数组是因为可能找到多个匹配项)。如果确定只有这一个匹配,想直接拿到标量值,加个[0]就行:

..key1[0]

这样就会直接返回3

再看包含列表的复杂场景

如果你的JSON里夹杂着列表结构,比如下面这种:

{
  "a": [
    {"b": {"key1": 10}},
    {"c": {"d": {"key1": 20}}},
    {"key1": 30}
  ]
}

同样用..key1这个表达式,会把所有层级的key1值都找出来,返回结果是[10, 20, 30]——不管键在列表元素的嵌套对象里,还是直接在列表元素上,都能精准匹配。

进阶玩法:过滤匹配结果

要是还想对找到的结果做筛选(比如只保留大于15的key1值),可以结合管道操作|和过滤表达式:

..key1|[?@ > 15]

执行后会返回[20, 30],灵活性拉满。

核心知识点

  • ..是JMESPath的递归下降运算符,它会遍历当前JSON的所有子节点(包括对象属性和列表元素),直到找到匹配的键。
  • 返回结果默认是数组,因为要兼容多个匹配的情况;如果确定只有一个结果,用[0]就能直接提取标量值。
  • 这个语法不管嵌套层级有多深、有没有列表,都能通用,彻底告别冗长的路径写法。

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

火山引擎 最新活动