一、jsonpath是什么?
用来解析json数据的所使用的。
二、jsonpath的作用
通过通用的表达式可以获取json中指定的值。
三、jsonpath的使用
1、安装jsonpath
pip install jsonpath
2、具体的使用
$ —根节点(root)
. —子节点(一个点)
… —子孙节点(两个点) 递归搜索
(*):—通配符,表示所有的元素
[] —子节点
eg:
import jsonpath
class_info = {"class_one": {
"students": [
{"name": "张一",
"sex": "男",
"age": 18,
"height": 170.5
},
{"name": "张二",
"sex": "女",
"age": 20,
"height": 160.5
},
{"name": "张三",
"sex": "男",
"age": 18,
"height": 170.5
},
{"name": "张四",
"sex": "女",
"age": 18,
"height": 165.5
},
],
"teacher": {
"name": "李小二",
"sex": "男",
"age": 30,
"height": 185.5,
"teacher": "递归搜索测试"
}
}
}
# 方式一
res = jsonpath.jsonpath(class_info,"$..class_one")
# 方式二:
res = jsonpath.jsonpath(class_info,"$[class_one]")
print(res)
控制台打印结果:
[{'students': [{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张四', 'sex': '女', 'age': 18, 'height': 165.5}], 'teacher': {'name': '李小二', 'sex': '男', 'age': 30, 'height': 185.5, 'teacher': '递归搜索测试'}}]
# 如果获取所有的name
res = jsonpath.jsonpath(class_info,"$..name")
print(res)
['张一', '张二', '张三', '张四', '李小二']
?(): 条件过滤 @ 代表当前元素
res = jsonpath.jsonpath(class_info, "$.class_pne.students.[?(@.age > 18)]")
print(res)
[{'name':'张二','sex':'女','age':20,'height':160.5}]