1. jsonpath模块的安装
-
jsonpath是第三方模块,需要额外的安装
pip3 install jsonpath
2. jsonpath模块提取数据的方法
from jsonpath import jsonpath
# 返回对象是一个列表
ret = jsonpath(data, 'jsonpath语法')
3. jsonpath语法规则
JSONPath | 描述 |
---|---|
$ | 根节点,即json数据最外层的大括号 |
@ | 现行节点 |
. or [] | 子节点 |
n/a | 取父节点,Jsonpath未支持 |
.. | 内部任意位置子孙节点 |
* | 匹配所有元素节点 |
n/a | 根据属性访问,Json不支持,因为Json是个Key-Value递归结构,不需要属性访问 |
[] | 迭代器标识(可以在这里边做简单的迭代操作,如数组下标,根据内容选值等) |
[,] | 支持迭代器中做多选 |
?() | 支持过滤操作 |
() | 支持表达式计算 |
n/a | 分组,JaonPath不支持 |
4. jsonpath应用示例
from jsonpath import jsonpath
data = {"key1": {"key2": {"key3": {"key4": {"key5": {"key6": "python3"}}}}}}
result = jsonpath(data, '$.key1.key2.key3.key4.key5.key6')
print(result)
result = jsonpath(data, '$..key6')
print(result)
"""
拉勾网json格式城市数据接口
https://www.lagou.com/lbs/getAllCitySearchLabels.json
"""
import json
from jsonpath import jsonpath
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
resp = requests.get("https://www.lagou.com/lbs/getAllCitySearchLabels.json", headers=headers)
dict_data = json.loads(resp.content)
# 获取所有的城市开头的字母
result = jsonpath(dict_data, "$..allCitySearchLabels")[0].keys()
# print(result)
# 获取所有城市名
result = jsonpath(dict_data, "$..name")
# print(result)
# 获取以A开头的城市名
result = jsonpath(dict_data, "$..A..name")
print(result)