import jsonpath
#.与[]作用相同后续就只写一个了
result = jsonpath.jsonpath(class_info,'$.class_one.students')print(result)
result = jsonpath.jsonpath(class_info,'$[class_one][students]')print(result)
输出:
[[{'name':'张一','sex':'男','age':18,'height':170.5},{'name':'张二','sex':'女','age':20,'height':160.5},{'name':'张三','sex':'男','age':18,'height':170.5}]]
[,]:支持迭代器中做多选,多个key用逗号隔开
import jsonpath
#递归查找包含teacher 或者 name的值# ..:表示递归查找,可以搜索到该json下所有符合条件的数据
result = jsonpath.jsonpath(class_info,'$..[teacher,name]')print(result)
输出:
[{'sex':'男','age':30,'height':185.5,'teacher':'递归搜索测试'},'张一','张二','张三','递归搜索测试']#获取students下第0个和第2个元素
re ="$..students[0,2]"
result = jsonpath.jsonpath(class_info,re)print(result)
输出:
[{'name':'张一','sex':'男','age':18,'height':170.5},{'name':'张三','sex':'男','age':18,'height':170.5}]
[start:end:step]:数组分割操作,等同于切片 , 遵循左闭右开原则
import jsonpath
#获取前2位学生的信息,支持下标运算,类似list通过下标取值一样
result = jsonpath.jsonpath(class_info,'$.class_one.students[0:2]')print(result)
输出:
[{'name':'张一','sex':'男','age':18,'height':170.5},{'name':'张二','sex':'女','age':20,'height':160.5}]
?():应用过滤表示式
import jsonpath
#找出年龄大于18的学生
result = jsonpath.jsonpath(class_info,'$.class_one.students.[?(@.age>18)]')print(result)
输出:[{'name':'张二','sex':'女','age':20,'height':160.5}]
六、过滤表达式
原字符
描述
==
等于符号,但数字1不等于字符1
!=
不等于符号
<
小于符号
<=
小于等于符号
>
大于
>=
大于等于符号
=~
判断是否符合正则表达式,例如[?(@.name =~ /foo.*?/i)]
in
所属符号:[?(@.name in[‘张二’,‘张三’])]
not in
排除符号:[?(@.name not in [‘张二’,‘张三’])]
&&
逻辑AND,用于合并多个过滤器表达式
II
逻辑OR,用于组合多个过滤器表达式
七、过滤表达式使用
==:等于
import jsonpath
#下面几个比较的和这个一样就不写了#找出name==张三的学生
result ="$.class_one.students.[?(@.name=='张三')]"print(result)
输出:[{'name':'张三','sex':'男','age':18,'height':170.5}]
in:所属符号
import jsonpath
#获取name等于张二或者张三
re ="$.class_one.students.[?(@.name in ['张二','张三'])]"
result = jsonpath.jsonpath(class_info,re)print(result)
输出:
[{'name':'张二','sex':'女','age':20,'height':160.5},{'name':'张三','sex':'男','age':18,'height':170.5}]#找出name为张二,张三的学生年龄
re ="$.class_one.students.[?(@.name in ['张二','张三'])].age"
result = jsonpath.jsonpath(class_info,re)print(result)
输出:[20,18]
&&:逻辑AND,用于合并多个过滤器表达式
import jsonpath
re ="$..students[?(@.name=='张三' && @.age==18)]"
result = jsonpath.jsonpath(class_info,re)print(result)
输出:[{'name':'张三','sex':'男','age':18,'height':170.5}]
||逻辑OR,用于组合多个过滤器表达式
import jsonpath
#获取name等于张三或者age等于18的学生
re ="$..students[?(@.name=='张三' || @.age==18)]"
result = jsonpath.jsonpath(class_info,re)print(result)
输出:[{'name':'张一','sex':'男','age':18,'height':170.5},{'name':'张三','sex':'男','age':18,'height':170.5}]
not in :排除符号
import jsonpath
#name不等于'张一','张三'的学生
re ="$..students[?(@.name not in ['张一','张三'])]"
result = jsonpath.jsonpath(class_info,re)print(result)
输出:
[{'name':'张二','sex':'女','age':20,'height':160.5}]