jmeter之json提取器详解

本文详细介绍了JSON提取器的使用,包括其在JMeter中的位置、功能以及各种应用场景。JSON提取器适用于处理JSON格式的数据,提供简单易懂的语法,支持提取多个键值对。文中还详细讲解了JSONPath表达式的各种操作符和过滤表达式,帮助用户更高效地从JSON数据中提取所需信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么需要json提取器?

  一般来说,通常提取数据我们使用的都是(正则表达式提取),无论任何格式的数据都能提取,属于万能提取器,但一般用作于取值单一数据,就是取值某一个键值对的数据,当然也可以提取多个,但表达式比较繁多复杂

  json提取器用作于返回格式为json格式的数据,语法简单简洁,适用于取值多个键值对数据。

json提取器:

  json提取是jmeter自带的,建议不要下载插件。路径为(后置处理器)>(json提取器)

json提取器功能讲解:

  Apply to:(应用范围)可以参照(正则表达式提取器)

    Main sample and sub-samples:主样本和子样本

    Main sample only:主要样本;一般用这个就行了

    Sub-samples only:仅子样本

    Jmeter Variable Name to use:用作jmeter变量名;可以提取(上一个json提取器中提所取的值),记得写上一个json返回值的变量名,注意不用写格式

  Name of created variables:创建的变量名称,用户自定义,用于储存值,可以多个,用分号(;)进行分隔。

  JSON Path expressions:json path表达式,用户匹配数据,可以填写多个,要求与变量名数量一致,用分号(;)进行分隔。

  Match NO.(0 fon Random):为空的默认值是0,(0代表随机、-1代表所有、其它则从1开始,1则代表取值第1个,2则代表取值第2个,类推。。。)Compute conxatenation var (suffix_ALL):该选项如果勾选,则将所有的值用逗号拼接,并保存到一个变量中。注意只有Match NO为 -1 时该功能打钩才有效果。Defaylt Values:默认值,用户自定义,可以多个,注意当变量名为多个时,默认值也要求多个,否则无法接口不运行无法查看结果树。

Json path语法讲解:

  $    根节点,表示json整个对象。某种意义上来讲 $. 可以省略,但不建议省略,保证语法完整。

  .     点,表示用来连接父、子节点。格式:key.key

  []    下标运算符,根据索引获取元素,也可以用来连接父、子节点。格式key["key2"]

    一般来说,使用 [] 可以提取多个子节点作为一个子JSON对象。格式$["key","key2"]

  ..  递归匹配所有子元素,表示提取所有节点、子节点中符合条件的节点值。格式$..

  *  表示通配,提取所有。

    $.*  表示提取根节点之下的所有节点(儿子)

    $..*  表示提取根节点之下所有子节点(子子孙孙,不限于儿子)

    $.key.key2  key2是一个数组,表示提取key下key2的值,结果是一个数组。

    $.key.key2[*]  表示提取key下的key2中的所有元素的值,结果是一个元素。

  @  表示当前节点,即表示自己。

数组的处理:  

  数组的处理一般来说,可以通过 (下标) 来提取数组元素。$.key.key2[*]

  $.key.key2[自然数],0表示第一个,1表示第2个,以此类推

  可以通过枚举的方式,一次提取多个元素。格式:数组[N1,N2,,,,,,,NN]。示例$key.key2[0,2,3]

取数组第一个值:$.key.key2[0]

切片:

  格式:[S:E]

  表示提取数组中下标从S开始(包含S),到E(不包含E)结束的所有元素的值。

  示例:$.key.key1[0:2],表示提取$.key.key1[0],$.key.key1[1] 这两个值。

  示例2:$.key.key1[1:3],表示提取$.key.key1[1],$.key.key1[2] 这两个值

  S和E可以为空,也可以为负数

    如果S为空,则表示S默认值是0

      示例:$.key.key2[:3], 等价与$.key.key2[0:3]

    如果E为空,则表示取值到最后一个元素(包含)。

      示例:$.key.key2[1:],表示从下标1开始,取值到最后一个元素

    如果S和E是负数,表示倒数第N个元素

      示例:$.key.key2[:-1],表示获取除了最后一个元素以外的所有值,也就是从最后一个开始数,不要最后一个,其余都要。如果是-2,也就是后面开始数,最后2个不要,其余都要

      示例2:$.key.key2[-2:],表示获取最后两个元素的值,如果是-1,则获取最后1个元素。类推

通过切片取第一个值:  $.key.key1[:1]

通过切片取倒数第一个值:$.key.key1[-1:]

过滤表达式:

  格式:数组[?(过滤表达式)]

    示例:$.key.key2[?(@.key=="values")]、表示获取key 等于“values”的值

       也可以$.key.key2[?(@.key=="values")].key3、表示获取key等于values的值的key3字段值

    示例2:$.key.key2[?(@.key!="values")]、表示获取key 不等于“values”的值

  操作符:==、!=、<、<=、>、>=

    ==  恒等于,要求数据与数据格式一致

    !=  不等于

    <  小于

    <=  小于等于

    >  大于

    >=  大于等于

  操作符2:=~、in、nin、||、&&、subsetof

    =~  正则匹配,也叫模糊匹配,

        示例需求1:查找学生中姓张的学生,则可以写成 $.key.keu2[?(@.name=~/张.*/)]。小知识,这里的*也可以用+代替

        示例需求2:查找学生中姓张的学生,且后面只有1个的字,则可以写成$.key.keu2[?(@.name=~/张.{1}/)],如果是$.key.keu2[?(@.name=~/张.{2}/)],则表示后面有2个字。

    in  存在于

      示例需求:查找学生中年龄等于20或等于25的学生,则可以写成 $.key.keu2[?(@.age in ["20","25"])]。等价于$.key.keu2[?(@.age == "20" || @.age=="25"])]

    nin  不存在于

      示例需求:查找学生中年龄不等于20且不等于25的学生,则可以写成$.key.keu2[?(@.age nin ["20","25"])]。等价于$.key.keu2[?(@.age != "20" && @.age!="25"])]

    ||  或则。上面已经演示了

    &&  并且。上面已经演示了

    subsetof  子集

      示例:$.key.key2[?(@.key subsetof ["key3","key4","key5"])]。表示获取

    额外小需求:查询所有科目都及格的学生,则可以写成$.key.key2[?(@.key age.min()>=60)]。age.min是一个数组。

到此讲解结束!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好度

你的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值