在 Python 中,JSONPath 库主要用于解析和查询 JSON 数据,提供了类似 XPath 在 XML 中的功能。最常用且维护活跃的库是 jsonpath-ng,它支持完整的 JSONPath 语法,并提供了灵活的 API。

  1. 核心库介绍:jsonpath-ng 是对早期 jsonpath-rw 的改进版本,具有以下特点:

    安装方式:pip install jsonpath-ng -i https://pypi.tuna.tsinghua.edu.cn/simple  

    1. 支持完整的 JSONPath 语法。

    2. 提供清晰的 API 接口。

    3. 支持自定义扩展。

    4. 良好的错误处理。

    5. 活跃的社区维护。

  2. 核心类与方法:

    1. parse() 函数:编译 JSONPath 表达式为可执行对象

    2. find() 方法:在 JSON 数据中执行查询,返回值是匹配结果列表。每个元素是 DatumInContext 对象。

    3. DatumInContext 对象:value:匹配到的实际值,path:匹配值在原始 JSON 中的路径,context:上下文信息。

  3. 关键功能解析:

    1. 基础查询:

      1. 通过 . 访问子节点:$.school.name

      2. 通过 [*] 访问数组所有元素:$.school.students[*].name

        with open(f'测试.txt', 'r', encoding='utf-8') as f:
            data = json.load(f)
        # 查询school里面所有students的hobbies
        expr1 = parse("$.school.students[*].hobbies")
        matches = expr1.find(data)
        for i in matches:
            print(i.value)
    2. 筛选查询

      • 使用 ?() 进行条件筛选

      • 支持比较运算符:==, !=, <, >, <=, >=

      • 支持逻辑运算符:&&, ||, !

      • 支持 in 关键字检查包含关系

    3. 递归搜索

      • 使用 .. 进行深层递归搜索

      • 示例:$..scores 会找到所有层级的 scores 字段

    4. 数组操作

      • 索引访问:[0] 获取第一个元素

      • 切片操作:[0:2] 获取前两个元素

      • 多元素选择:[0,2] 获取第 1 和第 3 个元素

    5. 扩展语法

      • 需要使用 from jsonpath_ng.ext import parse

      • 支持正则表达式:=~ /正则表达式/

      • 支持聚合函数:avg(), max(), min(), sum()

更多推荐