python jsonpath 与 filter 提取数据

1. filter

  • filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
  • 用法:filter(function, iterable)
infoList= {
    "Response": {
        "RequestId": "9d268c8f-26c4-d41d-cdcd-4f46c581100a",
        "Data": [
            {
                "Id": 1000001,
                "ProjectCode": 110022,
                "ProjectName": "易方达",
                "Info":{
                            "card":13132123123,
                            "bank_name":"中国银行"
                        }
            },
            {
                "Id": 1000002,
                "ProjectId": 165519,
                "ProjectName": "中证800医药",
                "Info":{
                            "card":16455231231,
                            "bank_name":"工商银行"
                        }
            },
            {
                "Id": 1000003,
                "ProjectId": 516160,
                "ProjectName": "南方中证新能源",
                "Info":{
                            "card":16455231231,
                            "bank_name":"农业银行"
                        }
            }
        ]
    }
}
# 获取匹配该数据的列表(若不匹配返回空列表) > [{'Id': 1000003, 'ProjectId': 516160, 'ProjectName': '南方中证新能源', 'Info': {'card': 16455231231, 'bank_name': '农业银行'}}]

result = list(filter(lambda x: x["ProjectName"] == "南方中证新能源", infoList["Response"]["Data"]))
print(result)

2. jsonpath

  • jsonpath() 是一种信息抽取类库,用来解析多层嵌套的json数据,存在返回列表,不存在返回False
  • 用法:jsonpath(dict_data,'$..key_name'); 其中:“$”表示最外层的{},“..”表示模糊匹配,当传入不存在的key_name时,程序会返回false
from jsonpath import jsonpath

# 1. 获取指定数据 > ['易方达', '中证800医药', '南方中证新能源']
print(jsonpath(infoList, "$..ProjectName"))

# 2. 获取第一条"bank_name" > ['易方达']
print(jsonpath(infoList, "$.Response.Data[0].ProjectName"))

# 3. 不存在返回 False
print(jsonpath(infoList, "$.Response.Total"))
posted @ 2021-08-30 16:32  tt_贝塔  阅读(717)  评论(0编辑  收藏  举报