python获取json中的元素:jsonpath和JMESPath

本文介绍了在接口自动化中如何使用JsonPath和JMESPath快速定位并获取动态JSON数据,通过实例演示了这两种工具的使用方法,适合处理不同结构的JSON响应。

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

       如何快速获取json中的数据,也可以换一句话,如何简单快速的获取json文件中的数据,是我们在接口自动化中常考虑的内容,原因在于某些接口响应的数据是不同的,例如:一个查询接口会根据传参的不同,响应不同从值。有时候给出的json中含有data参数,有时候没有。当我们用固定的json位置取值时是不适用的,那么jsonpath和JMESPath就是一个不错的选择。

        jsonpath:利用匹配的方式获取json文件中的数据。(我所掌握的方式,个人比较喜欢) 

import jsonpath


def way():
    json_demo = {
        "error_code": 0,
        "msg": "获取信息成功第一层",
        "content": {
            "data": [{
                "id": 4001,
                "name": "张三",
                "age": "18",
                "sex": "男",
                "address": "山东省第三层市",
                "phone": "18811221122"
            },
                {
                    "id": 4002,
                    "name": "李四",
                    "age": "18",
                    "sex": "女",
                    "address": "山东省第一层市",
                    "phone": "18811221123"
                },
                {
                    "id": 4003,
                    "name": "王五",
                    "age": "20",
                    "sex": "女",
                    "address": "山东省第二层市",
                    "phone": "18811221124"
                }
            ],
            "isSuccess": 1,
            "msg": "获取信息成功第二层"
        }
    }
    json1 = jsonpath.jsonpath(json_demo, '$..isSuccess')
    json2 = jsonpath.jsonpath(json_demo, '$..msg')
    json3 = jsonpath.jsonpath(json_demo, '$..address')
    return json1, json2, json3


if __name__ == '__main__':
    print(way())

 如果你精通UI自动化,那么你一定会对xpath定位方式十分熟悉,可以对照xpath定位方式来记jsonpath的定位方式。(当然,我比较懒,不喜欢记,只会记住最常用的)

XpathJSONPath描述
/$跟节点位置
.@当前节点位置
/. or []获取子节点位置
....选择所有符合条件的条件
**匹配所有元素节点
[][]迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
&#124[,]支持迭代器中做多选
[]?()支持过滤操作
n/a()支持表达式计算

JMESPath:同事推荐的,用起来也不错。

官方中文文档:https://www.osgeo.cn/jmespath/tutorial.html#filter-projections

感觉官方文档讲的非常好了,没有什么要补充说明的。

import jmespath


def way():
    json_demo = {
        "error_code": 0,
        "msg": "获取信息成功第一层",
        "content": {
            "data": [{
                "id": 4001,
                "name": "张三",
                "age": "18",
                "sex": "男",
                "address": "山东省第三层市",
                "phone": "18811221122"
            },
                {
                    "id": 4002,
                    "name": "李四",
                    "age": "18",
                    "sex": "女",
                    "address": "山东省第一层市",
                    "phone": "18811221123"
                },
                {
                    "id": 4003,
                    "name": "王五",
                    "age": "20",
                    "sex": "女",
                    "address": "山东省第二层市",
                    "phone": "18811221124"
                }
            ],
            "isSuccess": 1,
            "msg": "获取信息成功第二层"
        }
    }
    json1 = jmespath.search("msg", json_demo)
    json2 = jmespath.search("content.data[1].*", json_demo)
    return json1, json2


if __name__ == '__main__':
    print(way())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值