JsonPath详解

JsonPath

简介
JsonPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具

文档
http://goessner.net/articles/JsonPath


安装

pip install jsonpath



使用
注意:这里的json_data为python数据,如列表,字典

data = jsonpath.jsonpath(json_data, 匹配规则)

语法

路径操作符
$  根对象
.  选择当前层级的属性或数组元素
.. 选择所有符合条件的条件
*  通配符,匹配任意属性或数组元素

其余
@    现行节点
n/a    取父节点,Jsonpath未支持
n/a    根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。
[,]    支持迭代器中做多选。
?()    支持过滤操作.
()    支持表达式计算
n/a    分组,JsonPath不支持

基础示例

import jsonpath

json_dict_data = {
    "name": "John",
    "age": 30,
    "cities": ["New York", "London"],
    "scores": {
        "math": 90,
        "english": 85,
        "science": 95
    },
    "isNullValue": None
}

# 提取根对象下的 name 属性值
result_name = jsonpath.jsonpath(json_dict_data, "$.name")
print(result_name)

# 提取根对象下 cities 数组的第一个元素
result = jsonpath.jsonpath(json_dict_data, "$.cities[0]")
print(result)

# 提取根对象下 scores 对象的math属性值
result = jsonpath.jsonpath(json_dict_data, "$.scores.math")
print(result)

爬虫示例【urllib版】

import json

import jsonpath
from urllib.request import Request, urlopen
from fake_useragent import UserAgent


def cra1_1():
    url = 'http://xxx:8031/front/website/findAllTypes'
    headers = {'User-Agent': UserAgent().chrome}
    requests = Request(url, headers=headers)
    resp = urlopen(requests)
    result = json.loads(resp.read().decode())
    data1 = jsonpath.jsonpath(result, '$.code')
    print(data1)


if __name__ == '__main__':
    cra1_1()

爬虫示例【requests版】

import jsonpath
from fake_useragent import UserAgent
import requests


def cra1_1():
    url = 'http://xxx:8031/front/website/findAllTypes'
    headers = {'User-Agent': UserAgent().chrome}
    resp = requests.get(url, headers=headers)
    result = resp.json()
    code = jsonpath.jsonpath(result, '$.code')
    print(code)


if __name__ == '__main__':
    cra1_1()

你可能感兴趣的:(Python,python)