Python深层解析json数据之JsonPath

接口自动化中,面对大量或深层次的JSON响应数据,使用JsonPath可以方便地提取值。JsonPath是一种用于解析多层嵌套JSON的工具,提供多种语言实现,通过简单的语法进行数据提取。在Python中,可以通过`pip install jsonpath`安装,然后用`jsonpath.jsonpath(response, '$..key_name')`获取值,其中`$`代表顶层,`..`用于模糊匹配。相比XPath,JsonPath结构清晰,匹配更简单。" 82503778,66157,5GNR资源网格与DMRS/PBCH/CSI-RS分析,"['5G通信', '无线通信', '5GNR技术', '信号处理', '网络资源管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         我们在做接口自动化时,一般接口响应的都是json数据体,对响应数据进行提取使用或断言,当数据量很大或层级很深时,就会变得很麻烦,于是就可以用到jsonpath模块,解决json路径深取值难的问题。

一、 jsonpath介绍

用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

官网文档http://goessner.net/articles/JsonPath

二、安装使用

pip install jsonpath

import jsonpath

jp=jsonpath.jsonpath(response, '$..key_name')

“$”表示最外层的{},“..”表示模糊匹配,输出结果是list,当传入不存在的key_name时,程序会返回false

三、JsonPath与Xpath语法对比

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法

四、案例

案例1:
import jsonpath


json_data1={
        "error_code": 0,
        "stu_info": [
                {
                        "id": 1001,
                        "name": "橙汁",
                        "sex": "女",
                        "age": 33,
                        "addr": "上海市浦东新区城南路500弄105号",
                        "grade": "天蝎座",
                        "phone": "18300000000",
                        "gold": 10896,
                      
<think>嗯,用户想比较json.loads和jsonpath的功能及使用场景。首先,我得回忆一下这两个工具各自的作用。json.loads是Python标准库里的方法,用于将JSON字符串转换为Python字典或列表。而jsonpath应该是一个第三方库,用来通过路径表达式从JSON数据中提取特定部分,类似于XPath在XML中的应用。 用户可能在使用过程中遇到了需要解析和提取JSON数据的情况,想了解这两种方法的不同适用场景。比如,json.loads负责解析整个JSON结构,而jsonpath则用于高效查询复杂嵌套结构中的数据。需要明确两者的区别,比如功能定位、使用复杂度、性能等方面。 用户提供的引用中提到,jsonpath可以解决解析程序的健壮性问题,而json.loads可能遇到格式错误,如双引号问题。此外,引用3提到安全性问题,eval和exec有风险,但json.loads相对安全。这些点需要在回答中强调。 可能需要详细说明两者的使用步骤,比如json.loads的基本用法,以及jsonpath的路径语法,例如$.store.book[0].title这样的例子。同时,比较它们的优缺点,比如jsonpath在处理深层嵌套数据时的便利性,而json.loads需要手动逐层访问。 另外,用户的问题中还提到了使用场景,比如json.loads适合整体转换和数据操作,而jsonpath适合复杂查询和数据过滤。需要举一些具体的例子,比如从API响应中提取特定字段,或者处理多层嵌套的配置文件。 还要注意引用中的内容,比如第三方库demjsonpython-jsonpath-rw,可能需要在回答中提及这些工具作为补充,但主要聚焦于json.loads和jsonpath的区别。同时,要提到json.loads的常见错误,如双引号问题,以及如何处理,比如使用json_repair工具修复格式。 最后,用户可能需要了解在什么情况下选择哪种工具,比如数据结构简单时用json.loads,复杂查询用jsonpath。安全问题也是一个点,json.loads比eval安全,但需确保数据来源可靠。总结部分要清晰对比两者的核心差异,帮助用户做出合适的选择。</think>### JSON 解析工具对比:`json.loads` 与 `JSONPath` #### **核心区别** | 特性 | `json.loads` (Python标准库) | `JSONPath` (第三方工具) | |--------------------|-----------------------------------|------------------------------------| | **功能定位** | 将JSON字符串解析Python字典/列表 | 通过路径表达式从JSON中提取特定数据 | | **数据操作** | 需手动逐层访问嵌套数据 | 支持路径表达式直接定位复杂结构数据 | | **使用复杂度** | 简单,适合基础解析 | 需学习路径语法(类似XPath),适合复杂查询 | | **性能** | 原生解析,性能高效 | 遍历搜索可能增加额外开销 | | **典型场景** | 数据格式转换、简单字段提取 | API响应过滤、日志分析、多层嵌套数据提取 | --- ### **功能详解与示例** #### 1. **`json.loads` 的使用** - **核心功能**:将JSON字符串转为Python数据结构。 - **示例**: ```python import json json_str = ''' { "store": { "book": [ {"title": "Python编程", "price": 99}, {"title": "数据科学", "price": 150} ] } } ''' data = json.loads(json_str) print(data["store"]["book"][0]["title"]) # 输出:Python编程 ``` - **适用场景**: - 需要完整操作JSON数据(增删改查) - 数据格式简单,嵌套层级少 #### 2. **`JSONPath` 的使用** - **核心功能**:通过路径表达式提取数据,无需逐层遍历。 - **安装与语法**: ```bash pip install jsonpath-ng # 常用Python库 ``` 表达式示例: - `$.store.book[*].title` → 提取所有书名 - `$.store.book[?(@.price > 100)]` → 提取价格超过100的书籍 - **示例**: ```python from jsonpath_ng import parse expr = parse("$.store.book[*].title") matches = [match.value for match in expr.find(data)] print(matches) # 输出:['Python编程', '数据科学'] ``` - **适用场景**: - 处理多层嵌套或动态结构数据(如API响应) - 需要批量提取分散字段(如日志中的特定错误码) --- ### **关键差异总结** 1. **数据定位方式**: - `json.loads`:依赖Python语法逐层访问(如`data["a"]["b"]`)。 - `JSONPath`:通过声明式路径直接定位(如`$.a.b`)。 2. **健壮性与灵活性**: - `json.loads`:对格式要求严格(如双引号、无注释),需自行处理异常[^2]。 - `JSONPath`:可跳过部分格式问题,支持模糊查询(如`*`通配符)。 3. **安全风险**: - `json.loads`:安全性较高,但需确保输入合法[^3]。 - `JSONPath`:路径表达式可能被注入攻击(需校验表达式来源)。 --- ### **选择建议** - **优先使用`json.loads`**:当需要完整操作数据或结构简单时。 - **优先使用`JSONPath`**:当需快速提取复杂嵌套数据或编写通用解析规则时。 --- ### 相关问题 1. 如何用`JSONPath`处理动态变化的JSON结构? 2. `json.loads`解析失败时有哪些修复工具? 3. JSONPath与XPath在语法上有何异同?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大力测试进阶之路

打赏博主喝瓶水吧!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值