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": [
                {
                       
### Python解析JSON的方法和库 在Python中,可以使用多种方法和库来解析JSON数据。以下是几种常见的方法及其对应的实现: #### 方法一:使用内置`json`模块 Python提供了内置的`json`模块用于解析JSON数据。该模块支持将JSON字符串转换为Python对象以及将Python对象序列化为JSON字符串。 ```python import json # JSON字符串 json_str = '{"name": "Alice", "age": 25, "is_student": true}' # 将JSON字符串解析Python字典 data = json.loads(json_str) print(data) # 输出: {'name': 'Alice', 'age': 25, 'is_student': True} print(type(data)) # 输出: <class 'dict'> ``` 此方法适用于大多数基本场景,并且无需安装额外依赖[^1]。 --- #### 方法二:使用第三方库`ujson` `ujson`是一个高性能的JSON解析库,相较于标准库中的`json`模块速度更快。它适合处理大规模JSON数据或性能敏感的应用程序。 ```python import ujson # JSON字符串 json_str = '{"name": "Bob", "age": 30, "is_employee": false}' # 使用ujson加载JSON数据 data = ujson.loads(json_str) print(data) # 输出: {'name': 'Bob', 'age': 30, 'is_employee': False} print(type(data)) # 输出: <class 'dict'> ``` 需要注意的是,在使用`ujson`之前需要通过`pip install ujson`命令安装该库[^2]。 --- #### 方法三:使用正则表达式(不推荐) 虽然可以通过正则表达式提取JSON中的特定字段,但这并不是一种通用的做法,因为正则表达式的复杂性和局限性可能导致错误的结果。这种方法仅适用于简单结构化的JSON数据。 ```python import re # JSON字符串 json_str = '{"name": "Charlie", "age": 40, "city": "New York"}' # 提取"name"字段 match = re.search(r'"name"\s*:\s*"([^"]*)"', json_str) if match: name = match.group(1) print(name) # 输出: Charlie ``` 尽管如此,由于其易错性和维护困难,通常建议优先考虑其他更专业的工具[^3]。 --- #### 方法四:使用`jsonpath`进行高级查询 对于嵌套复杂的JSON文档,可以借助`jsonpath-ng`这样的库执行路径匹配操作,类似于XPath对XML的操作方式。 ```python from jsonpath_ng import parse # 嵌套JSON数据 json_data = { "store": { "book": [ {"category": "fiction", "title": "The Great Gatsby"}, {"category": "non-fiction", "title": "Sapiens"} ] } } # 定义JsonPath表达式 expression = parse('$.store.book[?(@.category == "fiction")]') # 查找符合条件的对象 result = [match.value for match in expression.find(json_data)] print(result) # 输出: [{'category': 'fiction', 'title': 'The Great Gatsby'}] ``` 这种技术特别有用当面对深层嵌套或者条件过滤需求的时候[^3]。 --- ### 总结 以上介绍了四种不同的Python解析JSON的方式,分别是基于官方提供的`json`模块、外部优化版`ujson`、灵活但风险较高的正则表达式方案以及针对复杂结构设计的`jsonpath`解决方案。每种都有各自适用范围,请依据实际项目情况选取最合适的手段完成任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王大力测试进阶之路

打赏博主喝瓶水吧!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值