Python json 数据提取 jsonpath 详解

文章介绍了JsonPath,一种用于从JSON文档中提取信息的工具,它有多种语言实现,如Python。文中通过实例展示了如何在Python中安装JsonPath库,并利用其语法元素,如过滤表达式,提取JSON数据。例如,提取所有城市名称、按条件筛选城市信息等。
摘要由CSDN通过智能技术生成

一、JsonPath

     JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。也就是独立的可以配合多种语言进行匹配的目标值的一种类库,和jmeter中的jsonPath匹配方式很像(具体参考此文章:https://www.cnblogs.com/Zhan-W/p/10985816.html )。优点之一: 数据可以通过交互方式从客户端上的JSON结构提取,不需要特殊的脚本

二、JsonPath特性

  1. 只能提取json格式的数据
  2. 提取后的数据类型与原数据类型一致

三、 JsonPath安装

pip install jsonpath -i https://pypi.doubanio.com/simple

 四、 JsonPath 语法元素

  官方文档:JSONPath - XPath for JSON

过滤表达式 

  五、 JsonPath 使用

import requests
import json
import jsonpath


if __name__ == '__main__':
    # 1.确认目标url
    url_ = 'https://www.lagou.com/lbs/getAllCitySearchLabels.json'

    # 用户代理的代理
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
    }

    # 2.发送网络请求,获取响应对象
    response_ = requests.get(url_, headers=headers_)

    #获取python格式,自动类型转换
    py_data=response_.json() # json()这是一个方法
    print(type(py_data),py_data)

    # $:根元素
    #(1)获取所有城市名称
    names=jsonpath.jsonpath(py_data,'$..name')
    print(len(names),names)

    # .or []:子元素
    #(2)获取所有城市中按字母分类的第一个城市的所有信息
    res=jsonpath.jsonpath(py_data,"$..allCitySearchLabels.*[:1]")
    print(len(res),res)

    # [, ]:支持迭代器中做多选,多个key用逗号隔开
    #(3)获取A字母的城市名和父城市id
    res=jsonpath.jsonpath(py_data,"$..A.[name,parentId]")
    print(len(res),res)

    #(4)获取B字母的城市下的第0个和第16个城市信息
    res=jsonpath.jsonpath(py_data,"$..B[0,16]")
    print(len(res),res)

    # [start:end:step]:数组分割操作,等同于切片, 遵循左闭右开原则
    #(5)获取B字母的城市下的前2个城市信息
    res=jsonpath.jsonpath(py_data,"$..B[:2]")
    print(len(res),res)


    # ?():应用过滤表示式
    #(6)获取B字母的城市下的id编号大于850的信息
    res=jsonpath.jsonpath(py_data,"$..B.[?(@.id>850)]")
    print(len(res),res)

    # == :等于
    # (7)查询城市是福州的城市信息
    res = jsonpath.jsonpath(py_data, "$..*[?(@.name=='福州')]")
    print(len(res), res)

    # in :所属符号
    # (8)查询城市是杭州,北京,天津的城市信息
    res = jsonpath.jsonpath(py_data, "$..*[?(@.name in ['杭州','北京','天津'])]")
    print(len(res), res)

    # (8)查询城市是杭州,北京,天津的code信息
    res = jsonpath.jsonpath(py_data, "$..*[?(@.name in ['杭州','北京','天津'])].code")
    print(len(res), res)

    # not in :排除符号
    # (9)查询城市不是杭州,北京,天津的城市信息
    res = jsonpath.jsonpath(py_data, "$..*[?(@.name not in ['杭州','北京','天津'])]")
    print(len(res), res)


   # &&:逻辑AND,用于合并多个过滤器表达式
   #  (10)查询城市是杭州,并且ID是653的城市信息
    res = jsonpath.jsonpath(py_data, "$..*[?(@.name =='杭州' && @.id==653)]")
    print(len(res), res)


    # || 逻辑OR,用于组合多个过滤器表达式
    # (11)查询城市是杭州, 或者ID大于1000的城市信息
    res = jsonpath.jsonpath(py_data, "$..*[?(@.name =='杭州' || @.id>1000)]")
    print(len(res), res)


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值