python之jsonpath模块用法分析(python jsonpath库)

网友投稿 1027 2022-08-28


python之jsonpath模块用法分析(python jsonpath库)

前言

JsonPath是一种信息抽取类库,用来解析多层嵌套的json数据,是从JSON文档中抽取指定信息的工具,提供多种原因实现保本:JavaScript/Python/PHP和Java。

JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。

安装

pip install jsonpath

官方文档:jsonpathres=jsonpath.jsonpath(dic_name,'$..key_name')

详细解释:

①参数dic_name的数据类型是python字典类型。

② '$..key_name'表达式:表示取到所有键为key_name的value。其中:“$”表示最外层的{},“..”表示模糊匹配。

③当传入不存在数据的表达式时,函数返回False布尔值。

④返回值的数据类型为python列表。

JsonPath与XPath语法对比

Json结构清晰,可读性高,复杂度低,非常容易匹配;

下表中对应了XPath的用法:

XPath

JSONPath

描述

​/​

​$​

根节点

​.​

​@​

现行节点

​/​

​.​​​or​​[]​

取子节点

​..​

n/a

取父节点,Jsonpath未支持

​//​

​..​

就是不管位置,选择所有符合条件的条件

​*​

​*​

匹配所有元素节点

​@​

n/a

根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要属性访问。

​[]​

​[]​

迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)

|

​[,]​

支持迭代器中做多选。

​[]​

​?()​

支持过滤操作.

n/a

​()​

支持表达式计算

​()​

n/a

分组,JsonPath不支持

jsonpath表达式示例

实例

实例1

d = { "error_code": 0, "stu_info": [ { "id": 2059, "name": "小白", "sex": "男", "age": 28, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "18378309272", "gold": 10896, "info": { "card": 434345432, "bank_name": '中国银行' } }, { "id": 2067, "name": "小黑", "sex": "男", "age": 28, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "12345678915", "gold": 100 } ]}res = d["stu_info"][1]['name'] # 取某个学生姓名的原始方法:通过查找字典中的key以及list方法中的下标索引print(res) # 输出结果是:小黑import jsonpathres1 = jsonpath.jsonpath(d, '$..name') # 嵌套n层也能取到所有学生姓名信息,$表示最外层的{},..表示模糊匹配print(res1) # 输出结果是list:['小白', '小黑']res2 = jsonpath.jsonpath(d, '$..bank_name')print(res2) # 输出结果是list:['中国银行']res3 = jsonpath.jsonpath(d, '$..name123') # 当传入不存在的key(name)时,返回Falseprint(res3) # 输出结果是:False

实例2

import jsonpathd = { "error_code": 0, "stu_info": [ { "id": 314, "name": "矿泉水", "sex": "男", "age": 18, "addr": "北京市昌平区", "grade": "摩羯座", "phone": "18317155663", "gold": 100, "cars": [ {"car1": "bmw"}, {"car2": "ben-z"}, ] } ]}result = jsonpath.jsonpath(d, '$..car2') # 模糊匹配result1 = jsonpath.jsonpath(d, '$.stu_info') # 取到stu_info这里的所有内容result2 = jsonpath.jsonpath(d, '$.stu_info[0]') # 取到stu_info里的第1个元素result3 = jsonpath.jsonpath(d, '$.stu_info[0].id') # 取到stu_info里的第1个元素中的idprint(result)print(result1)print(result2)print(result3)

运行结果:

['ben-z'][[{'id': 314, 'name': '矿泉水', 'sex': '男', 'age': 18, 'addr': '北京市昌平区', 'grade': '摩羯座', 'phone': '18317155663', 'gold': 100, 'cars': [{'car1': 'bmw'}, {'car2': 'ben-z'}]}]][{'id': 314, 'name': '矿泉水', 'sex': '男', 'age': 18, 'addr': '北京市昌平区', 'grade': '摩羯座', 'phone': '18317155663', 'gold': 100, 'cars': [{'car1': 'bmw'}, {'car2': 'ben-z'}]}][314]

去期待陌生,去拥抱惊喜。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决netty中spring对象注入失败的问题
下一篇:python解释器详解(python什么是解释器)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~