"""
jsonpath
jsonpath 使用场景
1.接口数据的提取,用于其他的接口
2.只能处理json格式的数据 (python中叫字典,java叫json)
jsonpath 使用
1.导包
2.特殊字符表示特殊的含义
$ :表示根元素
. [] 表示子元素
.. 表示递归 递归查找 【掌握】
[] : 子元素操作符, 切片取值 索引取值 字段名称 取值(多个字段用逗号隔开)
?(@): :jsonpath(teacher_info, "$..python.[?(@.age<20)]") 过滤表达式
?(@): sonpath(teacher_info, "$..python.[?(@.age<38 && @.height>175)]") 多条件过滤
"""
import pprint
from jsonpath import jsonpath
teacher_info = {"lemon":
{"python": [
{"name": "海励",
"sex": "男",
"age": 30,
"height": 175,
"info": "python自动化老师"
},
{"name": "木森",
"sex": "男",
"age": 28,
"height": 185,
"info": "python测开老师"
},
{"name": "小简",
"sex": "女",
"age": 18,
"height": 170,
"info": "python自动化老师"
},
{"name": "心蓝",
"sex": "男",
"age": 28,
"height": 185,
"info": "python测开老师"
},
{"name": "雨泽",
"sex": "男",
"age": 28,
"height": 190,
"info": "python自动化老师"
}
],
"java": {
"name": "三宝",
"sex": "男",
"age": 30,
"height": 185.5,
"info": "java测开老师"
}
}
}
res1 = jsonpath(teacher_info, "$.lemon.*") #取出lemon下的所有内容
res2 = jsonpath(teacher_info, "$.lemon.[0]") # 索引取,取出第一个字典内容
res3 = jsonpath(teacher_info, "$.lemon.[0,1]") # 切片取值,注意这个区间是闭区间。
res4 = jsonpath(teacher_info, "$.lemon.[0:5:2]") #切片,带步长
res5= jsonpath(teacher_info, "$.lemon.[name,age,height]") #获取指定的字段 【】指定
res6 = jsonpath(teacher_info, "$..python.[?(@.age<38 && @.height>175)]") #按照查询条件,@@and
res7 = jsonpath(teacher_info, "$..python.[?(@.age<38 || @.height>175)]") #按照查询条件|| 或
res8 = jsonpath(teacher_info, "$..python.[?(@.name in ['小简','木森'])].[age,info]") # 输出指定Key的,指定value
res9 = jsonpath(teacher_info, "$..python.[?(@.name in ['小简','木森'])]") #输出指定key的 全部信息
pprint.pprint(res1) #格式化输出
pprint.pprint(res2)
pprint.pprint(res3)
pprint.pprint(res4)
pprint.pprint(res5)
pprint.pprint(res6)
pprint.pprint(res7)
pprint.pprint(res8)
pprint.pprint(res9)