JSONPath¶
各种格式的数据反序列化为 dict 后,如果想更方便的获取指定字段数据,建议使用JsonPath,相当于 Xpath 之于 XML。
另一个待研究的JSON解析库:JmesPath
pip install jsonpath
$
根节点@
当前节点.
或者[]
子节点..
模糊匹配*
匹配所有节点[]
迭代器标示,可用于数组下标[0],范围选择[a,c]()
支持表达式计算?()
过滤操作
{
"A": 123,
"B": "str",
"C":
{
"C1":[1,2,3],
"C2":
{
"C2_1":
[
{"id":1, "name":"yi"},
{"id":2, "name":"er"},
{"id":3, "name":"san"}
]
}
}
}
import jsonpath
# 结果以list形式返回,匹配不到结果则返回False
jsonpath.jsonpath(json_obj,'$..name') # 获取所有“name”的值,['yi', 'er', 'san']
jsonpath.jsonpath(json_obj,'$..C2_1[*].id') # 获取所有id的值,[1, 2, 3]
jsonpath.jsonpath(json_obj,'$..C2_1[1]') # 获取C2_1对应列表的第二个数据,[{'id': 2, 'name': 'er'}]
jsonpath.jsonpath(json_obj,'$..C2_1[(@.length-1)]') # 获取C2_1对应列表的倒数第一个,[{'id': 3, 'name': 'san'}]
jsonpath.jsonpath(json_obj,'$..C2_1[?(@.id<2)]') # 过滤出C2_1对应列表中id小于2的值,[{'id': 1, 'name': 'yi'}]