json提取器(JSON Extractor)的使用,提取接口返回值给下个接口使用(关联)

本文详细介绍了如何使用JSON提取器从接口返回的JSON数据中提取特定值,如提取`pubKey`的值,通过JSONPath表达式$.datas.pubKey。此外,还讨论了如何处理嵌套数据结构,例如提取`violationCode`,并给出了匹配多个值时的设置方法。最后,阐述了在后续接口请求中引用提取值的步骤,确保请求数据的准确性。
摘要由CSDN通过智能技术生成

1、json提取器官方解释:

2、接口返回的数据是json格式,在要提取返回数据的接口中按如下步骤添加“json提取器”;

3、在接口返回数据中,要提取【pubKey】的值:

(1)json提取器填写介绍:

注意:如果同时提取多个:则Match No. (0 for Random)和Default Values一定要填;如果匹配的结果只有一个,则Match No.填“1”;另外Default Values可随便填“0”,不填的话会报错,匹配不到数据;

 (2)可以把json返回数据在网上的json格式化工具格式化一下,以帮助查看:


(3)JSON Path expressions匹配规则:

json串 []表示对象组成的数组,{}表示对象(Python中叫字典)。

对象里包含多个 "属性":属性值。属性值可以是值,或数组,或对象。

JSON Extractor使用json path表达式匹配,可以一次取多个变量值。

美元符号“$”表示响应的根对象;

英文句号“.”表示取子对象或对象的属性;(或者:表示取字典里key的value)

英文中括号“[]”表示取数组里的对象用,数组索引从0开始。

实例:取上面json串里的pubKey的值,表达式为:$.datas.pubKey

(4)举一个其他例子:

如果返回结果的有多个嵌套,怎么办?

比如要提取下图中的violationcode的参数1345,要怎么做呢?首先,了解返回的结构,这个是一个字典里嵌套了一个列表,然后列表里再嵌套了一个字典。那么我们的json path expression就应该设置为$.result[0].violationCode。

详解:其实,也没多难。代码中怎么取,就怎么取,学过代码就知道很简单了。

外面是一层字典,先取result,根据key(result)取values

然后是一层列表,我们取第一个,就是0 ;

然后是一层字典,再根据key取values即可,即violationcode取参数1345

(5)同时提取多个值:如下,要同时提取keyId和pubKey;

当json提取器要提取两个值(或两个以上)的时候,一定要填写默认值,不然会报错“Mismatch between number of variables, json expressions and default values”

4、在后面的接口中引用上面提取的值:

美元符号和大括号,大括号里填写json提取器里的“创建变量的名称”(names of created variables)里填的值;

 执行请求,在察看结果树里看请求里发送的数据是否准确:如果准确,说明提取成功。

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果上一个接口返回值的长度是不定的,您可以使用JMeter的正则表达式提取JSON提取提取值,并且使用BeanShell或JSR223前处理将其添加到另一个值中。以下是一些步骤,可以帮助您实现这一点: 1. 在上一个接口的响应中,找到您想要提取的值的模式或路径。例如,如果响应是JSON格式,您可以使用JSON Extractor来提取值。如果响应是文本格式,您可以使用正则表达式提取提取值。 2. 在下一个接口的请求中,使用`${__BeanShell(vars.get("variableName") + "additionalValue")}`的形式,将变量和另一个值相加。例如,如果您想将变量"token"与值"1234"相加,您可以使用`${__BeanShell(vars.get("token") + "1234")}`将其插入到下一个接口的请求参数中。 3. 添加一个BeanShell或JSR223 PreProcessor到下一个接口的请求中,并使用以下代码将结果存储在一个新的变量中: ``` String value1 = vars.get("variableName"); String value2 = "additionalValue"; String newValue = value2; Pattern pattern = Pattern.compile("your_regex_pattern_here"); Matcher matcher = pattern.matcher(value1); while(matcher.find()) { newValue += matcher.group(); } vars.put("newVariableName", newValue); ``` 在上述代码中,将"value1"替换为您从上一个接口响应中提取的变量名称,将"value2"替换为您想要将其添加到提取的值中的其他值,将"your_regex_pattern_here"替换为您要匹配的正则表达式。将"newVariableName"替换为您想要将结果存储的新变量名称。 4. 运行测试并验证是否成功将上一个接口返回的值与另一个值相加,并将其作为下一个接口的请求参数。 希望这能帮到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值