前言:
现时同学们对“python输出数组的索引号”大概比较关注,姐妹们都想要学习一些“python输出数组的索引号”的相关内容。那么小编在网上网罗了一些对于“python输出数组的索引号””的相关文章,希望同学们能喜欢,小伙伴们快快来了解一下吧!学习目录
jsonpath安装
jsonpath使用
jsonpath语法
使用介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,目前被广泛应用,在实际使用过程中不管是开发工程师还是测试工程师都必须学会json数据的处理。
Python中有几个库可以比较好的处理json数据,比如内置库json、外部库Demjson、jsonpath,上一章节介绍了json库的使用方法(json库使用),本章主要介绍外部库jsonpath的使用
日常编码过程中遇到比较复杂的JSON数据,想要根批量提取自己想要的JSON数据里的内容,是比较麻烦的。JsonPath 模块正好能解决这类问题,JsonPath类似于XPath,支持选择器、过滤器和函数等功能,能够方便地从JSON数据中提取所需信息。
jsonpath安装
通过pip install jsonpath命令安装jsonpath库
jsonpath使用
通过from jsonpath import jsonpath导入所需模块
jsonpath()函数传入的对象是字典;如果是json字符串数据需要事先转换为字典。
使用时如果没有匹配到数据,返回False;使用时如果匹配到数据,返回的是包含数据的列表list;jsonpath语法
jsonpath的语法比较简单和直观。它使用点号(.)和方括号([])来访问JSON对象的属性和数组元素,下面是一些常用的jsonpath语法:
原字符
描述
$
表示根节点,是jsonpath表达式的开始
@
当前节点
. or []
子节点
..
递归搜索(搜索符合条件的所有数据)
*
通配符,表示所有的内容
[]
支持访问数组,可以用于处理索引,元素等情况
[,]
支持迭代器中做多选,多个key用逗号隔开
[start:end:step]
数组分割操作,等同于切片
?()
应用过滤表示式,一般与@结合使用
使用介绍
定义一个字典,存放用户的姓名/年龄/住址等信息。
from jsonpath import jsonpathjson_data = {"name":"userinfo", "province":"js", "users":[ {"name":"lili","age":21, "address":["nj","jiangningqu","xixihuayuan"]}, {"name":"nana","age":20, "address":["yz","qixiaqu","qinqinhuayuan"]}, {"name":"xinxin","age":21, "address":["sz","yuhuataiqu","huiyuhuayuan"]} ] }使用$.users获取第1个节点users的全部信息
print(jsonpath(json_data,'$.users'))#结果如下[[{'name': 'lili', 'age': 21, 'address': ['nj', 'jiangningqu', 'xixihuayuan']}, {'name': 'nana', 'age': 20, 'address': ['yz', 'qixiaqu', 'qinqinhuayuan']}, {'name': 'xinxin', 'age': 21, 'address': ['sz', 'yuhuataiqu', 'huiyuhuayuan']}]]使用$.users[*]获取users对应数组内所有的数据
print(jsonpath(json_data,'$.users[*]'))#结果如下: 可以发现该结果返回的列表比上面的少一个[][{'name': 'lili', 'age': 21, 'address': ['nj', 'jiangningqu', 'xixihuayuan']}, {'name': 'nana', 'age': 20, 'address': ['yz', 'qixiaqu', 'qinqinhuayuan']}, {'name': 'xinxin', 'age': 21, 'address': ['sz', 'yuhuataiqu', 'huiyuhuayuan']}]使用$.users[0,2]获取users的数组内第1和第3个数据
print(jsonpath(json_data,'$.users[0,2]'))#结果如下[{'name': 'lili', 'age': 21, 'address': ['nj', 'jiangningqu', 'xixihuayuan']}, {'name': 'xinxin', 'age': 21, 'address': ['sz', 'yuhuataiqu', 'huiyuhuayuan']}]使用$.users.[name]获取数组内所有的name的值
print(jsonpath(json_data,'$.users.[name]'))#结果如下['lili', 'nana', 'xinxin']使用$.users[0].name获取数组第1个索引对应的name
print(jsonpath(json_data,'$.users[0].name'))#结果如下['lili']使用'$..name'获取所有key为name的值
print(jsonpath(json_data,'$..name'))#结果如下['userinfo', 'lili', 'nana', 'xinxin']使用$.users..age获取users对应数组内所有age的值
print(jsonpath(json_data,'$.users..age'))#结果如下[21, 20, 21]如果明确知道users的数组的层级关系,使用jsonpath(json_data,'$.users.[*][age]')等同于上面的查找结果JSONPATH的过滤器
JSONPATH还支持使用过滤器来对JSON数据进行更精细的查询和过滤。过滤器中使用方括号[]中的表达式来指定过滤条件。下面是一些常见的过滤器:
==:等于
!=:不等于
<:小于
<=:小于或等于
>:大于
>=:大于或等于
=~:正则表达式匹配
!~:不匹配正则表达式
使用$.users[(@.length-1)]过滤数组最后一条数据
print(jsonpath(json_data,'$.users[(@.length-1)]'))#结果如下[{'name': 'xinxin', 'age': 21, 'address': ['sz', 'yuhuataiqu', 'huiyuhuayuan']}]使用$.users.[?(@.age==20)]过滤数组中age等于20的数据
print(jsonpath(json_data,'$.users.[?(@.age==20)]'))#结果如下[{'name': 'nana', 'age': 20, 'address': ['yz', 'qixiaqu', 'qinqinhuayuan']}]
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
标签: #python输出数组的索引号 #json对象获取属性的方法 #json数据转换为对象数组 #python正则提取括号中数据 #pythonjson递归