Python中JsonPath提取器和正则提取器

 更新时间:2023年03月27日 09:25:13   作者:炫酷的腿毛!  
本文主要介绍了Python中JsonPath提取器和正则提取器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

我们一般在做接口关联时,会通过保存中间变量实现接口关联,在关联时就需要用到变量提取,那今天我们就介绍接口自动化中变量提取的两大神器:正则提取器和JsonPath提取器。

1.1 正则提取器

正则提取(正则表达式只能提取字符串的数据)

1、re.seach:只匹配一个值,通过下标[1]取值,没有匹配到返回None
2、re.findall:匹配多个值,返回列表list,多个值通过下标取值,没有返回None

1.2 正则示例:

import re
import requests

a = requests.get("http://www.baidu.com")
# print(a.text)

b = re.search('charset=(.*?)><meta http-equiv=X-UA-Compatible content=IE=Edge>', a.text)
print(b)
print(b.group())
print(b.groups())
print(b.group(1))

结果:

<re.Match object; span=(94, 157), match='charset=utf-8><meta http-equiv=X-UA-Compatible co>
charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge>
('utf-8',)
utf-8

匹配通配符:

我们一般用(.*?)和(.+?)来匹配我们需要提取的数值

解释:

  • . 表示任意一个字符
  • + 表示匹配它前面的表达式1次或者多次
  • * 表示匹配它前面的表达式0次或者多次
  • ? 表示匹配它前面的表达式1次或者多次
token = re.search('"token":"(.*?)",',res.text)[1]
print("token1:%s",%token)

token = re.findall('"token":"(.*?)",'res.text)
print("token2:%s",%token)

1.3 JsonPath提取器

JsonPath提取(JsonPath只能提取json格式的数据)

jsonpath.jsonpath ,返回的是一个list,通过下标取值,没有返回None

JsonPath语法

符号描述
$查询的根节点对象,用于表示一个json数据,可以是数据或者对象
@过滤器,处理的当前节点对象
*获取所有节点
.获取子节点
. .递归搜索,筛选所有符合条件的节点
?()过滤器表达式,筛选操作
[a]或者[a,b]迭代器下标,表示一个或多个数组下标

1.4 JsonPath提取器具体使用

下面使用一个JSON文档演示JSONPath的具体使用。JSON 文档的内容如下:

{
  "store": {
    "book":[
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}   

1、假设变量bookJson中已经包含了这段json字符串,可以通过一下代码反序列化得到json对象:

books=json.loads(bookJson)

2、查看store下的bicycle的color属性

checkurl = "$.store.bicycle.color"
print(jsonpath.jsonpath(data, checkurl))
# 输出:['red']   

3、输出book节点中包含的所有对象

checkurl = "$.store.book[*]"
object_list = jsonpath.jsonpath(data, checkurl)
print(object_list)

#输出
[{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, 
{'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]

4、输出book节点的第一个对象

checkurl = "$.store.book[0]"
obj = jsonpath.jsonpath(data, checkurl)
print(obj)
# 输出: ['category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}]

5、输出book节点中所有对象对应的属性title值

checkurl = "$.store.book[*].title"
titles = jsonpath.jsonpath(data, checkurl)
print(titles)
# 输出: ['Sayings of the Century', 'The Lord of the Rings']

6、输出book节点中category为fiction的所有对象

checkurl = "$.store.book[?(@.category=='fiction')]"
books=jsonpath.jsonpath(data, checkurl)
print(books)
#输出
[{'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]

7、输出book节点中所有价格小于10的对象

checkurl="$.store.book[?(@.price<10)]"
books = jsonpath.jsonpath(data, checkurl)
print(books)
# 输出: [{'category': 'reference', 'author': 'Nigel Rees', 'title':'Sayings of the Century', 'price': 8.95}]

8、输出book节点中所有含有isb的对象

checkurl = "$.store.book[?(@.isbn)]"
books = jsonpath.jsonpath(data,checkurl)
print(books)
# 输出: [{'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]

到此这篇关于Python中JsonPath提取器和正则提取器的文章就介绍到这了,更多相关JsonPath提取器和正则提取器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python控制自己的手机摄像头拍照并自动发送到邮箱案例讲解

    Python控制自己的手机摄像头拍照并自动发送到邮箱案例讲解

    这篇文章主要介绍了Python控制自己的手机摄像头拍照,并把照片自动发送到邮箱,大概思路是通过opencv调用摄像头拍照保存图像本地用email库构造邮件内容,保存的图像以附件形式插入邮件内容用smtplib库发送邮件到指定邮箱,需要的朋友可以参考下
    2022-04-04
  • python字符串中匹配数字的正则表达式

    python字符串中匹配数字的正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。这篇文章主要介绍了python字符串中匹配数字的正则表达式 ,需要的朋友可以参考下
    2019-07-07
  • Python中使用pypdf2合并、分割、加密pdf文件的代码详解

    Python中使用pypdf2合并、分割、加密pdf文件的代码详解

    这篇文章主要介绍了Python中使用pypdf2合并、分割、加密pdf文件的代码,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • flask框架自定义url转换器操作详解

    flask框架自定义url转换器操作详解

    这篇文章主要介绍了flask框架自定义url转换器操作,结合实例形式分析了URL转换器的相关原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-01-01
  • 详解基于python的全局与局部序列比对的实现(DNA)

    详解基于python的全局与局部序列比对的实现(DNA)

    这篇文章主要介绍了详解基于python的全局与局部序列比对的实现(DNA).文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • python计算圆周率pi的方法

    python计算圆周率pi的方法

    这篇文章主要介绍了python计算圆周率pi的方法,涉及Python针对数学运算的相关技巧,需要的朋友可以参考下
    2015-07-07
  • python中类的相互调用的实践

    python中类的相互调用的实践

    本文主要介绍了python中类的相互调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python如何生成随机n位数字与字母组合(创建随机)

    python如何生成随机n位数字与字母组合(创建随机)

    这篇文章主要介绍了python如何生成随机n位数字与字母组合(创建随机),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Windows下实现将Pascal VOC转化为TFRecords

    Windows下实现将Pascal VOC转化为TFRecords

    今天小编就为大家分享一篇Windows下实现将Pascal VOC转化为TFRecords,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python格式化css文件的方法

    Python格式化css文件的方法

    这篇文章主要介绍了Python格式化css文件的方法,实例分析了Python操作文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论