当前位置: 首页 > news >正文

Python json 数据提取 jsonpath 详解

一、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 jsonpathif __name__ == '__main__':# 1.确认目标urlurl_ = '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字母的城市名和父城市idres=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)

 

http://www.lryc.cn/news/58328.html

相关文章:

  • TCP和UDP的区别以及应用场景
  • 高铁轮毂表面缺陷的<视觉显著性>超像素图像检测方法
  • 纺织工业库房如何有效防潮?恒温恒湿真的有效吗?
  • SDK之动态链接库开发—基本概念
  • spring生命周期、IOC工作流程、AOP过程,循环依赖、BeanFactory和FactoryBean
  • 小黑子—Java从入门到入土过程:第六章
  • python实战应用讲解-【numpy数组篇】常用函数(二)(附python示例代码)
  • windows10 java 创建合约
  • 阿里巴巴获得商品详情 API调用示例
  • 企业工程管理系统源码-数字化可视化项目管理平台
  • 【C语言】一文带你简单了解C语言
  • LeetCode 589 LeetCode590 N叉树的前序遍历和后序遍历
  • 为什么CAD多段线没有面积属性或数值不对?快看过来!
  • WRF后处理:使用ncl脚本批量提取wrfout变量并输出/Shell 入门:Shell进入不同文件夹执行脚本
  • Consul在Windows系统下的安装与启动
  • 2022国赛16:神州路由器交换机BGP配置实例1
  • PaddlePaddle NLP学习笔记1 词向量
  • 无重复全排列 [2*+]
  • 【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了....
  • Elastic(ELK) Stack 架构师成长路径
  • Netty的高性能体现在哪些方面
  • CompletableFuture详解
  • (学习日记)2023.3.10
  • 【图像分割】Meta分割一切(SAM)模型环境配置和使用教程
  • AJ入门路线
  • 多商户商城小程序源码开发需具备哪些功能?
  • 【动态规划模板】最长公共|上升子序列问题
  • Android系统启动流程--zygote进程的启动流程
  • C++程序设计——异常
  • 2022年第十三届蓝桥杯web开发—东奥大抽奖【题目、附官方解答】