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

使用jsonpath_ng对比带与不带通配符的JSONPath的实现方法

基于jsonpath_ng的JSONPath匹配判断实现

核心思路

不需要手动解析JSONPath语法规则,直接利用jsonpath_ng的原生赋值、匹配能力实现通用校验:

  • 构造仅包含「精确JSONPath」对应节点的最小模拟JSON结构
  • 用待校验的「带通配符的JSONPath」匹配该模拟结构
  • 匹配结果非空则说明精确路径指向的节点会被通配符路径命中

该方案天然兼容jsonpath_ng支持的所有JSONPath特性(包括切片、属性过滤器、多层通配符**等),不需要手动适配新语法。

代码实现

from jsonpath_ng import parse

def is_exact_path_matched_by_wildcard(exact_path: str, wildcard_path: str) -> bool:
    # 解析两个JSONPath
    try:
        exact_expr = parse(exact_path)
        wildcard_expr = parse(wildcard_path)
    except Exception as e:
        # JSONPath格式非法时可根据业务需要处理异常
        raise ValueError(f"JSONPath格式错误: {str(e)}")
    
    # 构造仅包含精确路径节点的最小JSON对象
    mock_json = {}
    # 给精确路径的节点赋值任意非空值(此处用True做标识)
    exact_expr.update_or_create(mock_json, True)
    
    # 用通配符路径匹配模拟对象
    match_result = wildcard_expr.find(mock_json)
    
    # 匹配结果非空则说明命中
    return len(match_result) > 0

测试示例

# 业务场景示例
exact_path = "$.top.middle[0].bottom[0].START"
wildcard_path = "$.top.middle[*].bottom[*].START"
print(is_exact_path_matched_by_wildcard(exact_path, wildcard_path))
# 输出: True

注意事项

输入的exact_path需要是无通配符的精确路径,否则构造模拟JSON对象时可能生成多余节点,导致校验结果不符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:02