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

如何使用JsonPath查询所有键名包含指定字符串的元素

JsonPath按键名模糊匹配的实现方案

标准JsonPath规范目前确实未原生支持键名的contains、正则匹配等能力,但主流的第三方JsonPath实现大多提供了非标准的扩展语法可以实现该需求,具体方案如下:

测试JSON结构

你提供的参考结构如下:

{
    "find-this": "sample1",
    "test": {
        "find-this": "sample2",
        "test": [
            {
                "find-this": "sample3",
                "test": "sample"
            }
        ]
    }
}

注:你给出的预期返回示例不符合JSON语法规范,数组不能直接包含键值对,实际返回结果会是包含匹配值的数组 ["sample1","sample2","sample3"],或包含对应键值对对象的数组 [{"find-this":"sample1"},{"find-this":"sample2"},{"find-this":"sample3"}]

方案1:主流实现扩展语法(推荐)

Java生态的Jayway JsonPath、JavaScript生态的jsonpath-plus、Python生态的jsonpath-ng等常用实现都支持正则匹配键名的扩展能力,对应查询写法如下:

匹配所有键名包含this的节点

$..[?(@ =~ /.*this.*/)]

执行后直接返回匹配到的三个值:["sample1","sample2","sample3"],符合需求。

其他匹配规则扩展

调整正则部分即可实现不同匹配逻辑:

  • 键名以this结尾:$..[?(@ =~ /.*this$/)]
  • 键名以find开头:$..[?(@ =~ /^find.*/)]

方案2:全兼容通用方案

如果你使用的JsonPath实现不支持上述扩展语法,可以通过两步操作实现:

  1. 用表达式$..*递归查询出JSON中的所有节点
  2. 自行遍历查询结果,过滤出键名符合要求的条目即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:24:03