首页 > 其他分享 >【测试基础】jsonpath使用详解

【测试基础】jsonpath使用详解

时间:2024-12-11 14:11:21浏览次数:7  
标签:category .. price book 表达式 测试 详解 jsonpath

jsonpath介绍

JsonPath是用来解析多层嵌套的JSON数据。可以认为JsonPath就是JSON版本的XPath。
它是一种信息抽取类库,是从JSON文档中抽取指定信息的工具。JsonPath对于JSON来说,就相当于XPath之于XML。

JsonPath在线解析:https://jsonpath.com/
python在进行接口关联的时候经常会用到参数提取,对于json格式的提取时jsonpath提取器就很常用

jsonpath函数

特点:只能提取json格式的数据,提取后的数据类型与原数据类型一致
我们在使用jsonpath的时候一般是使用它里面的jsonpath函数,即jsonpath.jsonpath()

jsonpath()接受5个参数,如下

jsonpath(obj, expr, result_type='VALUE', debug=0, use_eval=True)

  • obj:要搜索的 JSON 对象。
  • expr:JSONPath 表达式,用于指定要提取的值的路径。
  • result_type:可选参数,用于指定返回结果的类型。默认为 ‘VALUE’,表示返回匹配到的值;还可以选择 ‘PATH’,表示返回匹配到的路径;或者选择 ‘BOTH’,表示同时返回匹配到的值和路径。
  • debug:可选参数,用于控制调试模式。默认为 0,表示关闭调试模式;设置为 1,则会在控制台输出调试信息。
  • use_eval:可选参数,用于指定是否使用 eval() 函数来计算表达式。默认为 True,表示使用 eval();设置为 False,则会使用更安全的方式来计算表达式。

其中objexpr是必须参数,即要处理的json数据对象提取表达式,常用的就是这两个参数,其他参数可以根据个人需要赋值。

jsonpath表达式expr

jsonpath的匹配表达式规则和xpath对应关系如下,为空表示不支持,如下

xpath jsonpath 描述
/ $ 从根节点开始匹配
. @ 从当前节点开始匹配
/ .节点 or [节点1,节点2] 取子节点
. . 取父节点,jsonpath不支持
// . . 就是不管位置,选择所有符合条件的条件(递归匹配)
* * 匹配所有节点
@
[ ] [ ] 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
| [ , ] 支持迭代器中做多选
[ ] ?() 支持过滤操作---需要加一层表达式[]
( ) 支持表达式计算
( ) 分组

过滤器

过滤器是用于过滤数组的逻辑表达式,一个通常的表达式形如:[?(@.age > 18)],可以通过逻辑表达式&&||组合多个过滤器表达式
例如$..book[?(@.price < 10 && @.category == 'fiction')]
字符串必须用单引号包围,例如[?(@.color == 'blue')]

操作符 描述
== 等于符号,但数字1不等于字符1(1 is not equal to ‘1’)
!= 不等于
< 小于
<= 小于等于
> 大于等于
>= 大于等于
=~ 判断是否符合正则表达式,例如[?(@.name =~ /foo.*?/i)]
in 属于,例如[?(@.size in ['S', 'M'])]
nin 排除符号
size 左侧(数组或字符串)的大小应与右侧一致
empty 数组或字符串)应为空
subsetof 左是右的子集 [?(@.sizes subsetof [‘S’, ‘M’, ‘L’])]
anyof 左与右有交集 [?(@.sizes anyof [‘M’, ‘L’])]
noneof 左边与右边没有交集 [?(@.sizes noneof [‘M’, ‘L’])]

示例

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "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
        }
    },
    "expensive": 10
}
JsonPath Result
$.store.book[*].author 所有书籍的作者
$..author 所有作者
$..book[2] 第3本数
$..book[0,1] 前2本数
$..book[1:3] 切片操作,从索引 1(含)到索引 3(不含)的所有书籍
$..book[-1:] 倒数第一本数
$..book[?(@.isbn)] 所有有 ISBN 编号的书籍
$.store.book[?(@.price < 10)] 价格低于10的所有数据
$..book.length 书籍的数量
$..book[?(@.price < 10 && @.category == 'fiction')] 所有price下价格小于10 and category等于fiction的数据
$..book[?(@.price < 10 || @.category == 'fiction')] 所有price下价格小于10 or category等于fiction的数据

length在python中无法使用,可以先取列表然后用len()进行获取数量

标签:category,..,price,book,表达式,测试,详解,jsonpath
From: https://www.cnblogs.com/upstudy/p/18596488

相关文章

  • halcon gamma_image算子详解
    算子用于对图像进行伽马校正,这是一种非线性变换,常用于调整图像的亮度和对比度,尤其是在处理传感器数据时,因为它们可能会有非线性的响应特性。gamma_image(Image,GammaImage,0.416667,0.055,0.0031308,255,'true')参数详解gamma:=0.416667//通常0.8<=Gamma<=2.2,这里......
  • 数据结构:单链表详解
    1.单链表的介绍2.单链表的使用(1)结点的头/尾部的插入和删除(2)对特定结点的查找(3)在指定位置之前/后插入和删除数据(4)销毁链表3.链表与顺序表的对比我以过客之名,祝你前程似锦一.单链表1.概念与结构:概念:链表是⼀种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑......
  • #渗透测试#红队攻防 kioptix level 2靶机getshell及提权
    声明!文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!目录标题一、准备阶段1.找出ip端口和服务信息扫出ip扫出端口端口对应服务信息2.目录扫描3.漏洞扫描nmap扫描漏洞searchsploit查找漏洞二、获取权限1.访......
  • C语言:define定义常量和定义宏(详解)
    本篇博客给大家带来的是#define定义常量和#define定义宏的方法......
  • npm全部基础知识详解
    目录npm基础npm配置和命令npm包管理使用npm脚本npm(NodePackageManager)是一个用于Node.js的包管理器,它允许开发者轻松地安装、更新、卸载和共享JavaScript库或模块。npm是Node.js的默认包管理器,并且是世界上最大的软件注册表之一,包含了数十万个可重用的代码......
  • 交易系统:订单模型设计详解
    大家好,我是汤师爷~订单模型作为整个交易系统的核心,支撑着所有交易环节。订单域核心概念模型如图所示,为订单核心概念模型。1、订单在实际交易业务处理中,订单会根据不同的业务规则(如店铺、收货地址、配送方式等)拆分成多个子订单,形成一个父订单对应多个子订单的结构。这种拆分......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 数据迁移测试点梳理(需要测试验证的地方)
    在进行数据迁移测试时,以下是一些关键的测试点,以确保迁移数据的正确性和完整性:基本数据迁移测试点:表结构对比:确认旧数据库与新数据库的表结构是否一致。字段匹配与值匹配:对照旧数据库与新数据库的字段,确保字段名称和类型匹配。验证字段值在新旧数据库中是否保持一致。......
  • 【洛谷】P1217 [USACO1.5] 回文质数(AC详解)
    #include<iostream>//引入输入输出流头文件,用于实现标准输入输出操作,例如使用cin和cout#include<cmath>//引入数学函数库头文件,主要用于调用sqrt函数来求平方根,辅助判断质数usingnamespacestd;//函数声明,用于判断一个整数是否为质数,接收一个整数参数,返回布尔值......