JMeter JSON提取器

JMeter的JSON提取器用于高效地从服务器返回的JSON字符串中获取所需数据。它支持JSONPath表达式来提取数据,并允许用户自定义变量名称、匹配规则和默认值。JSONPath语法包括根节点、子节点操作、数组操作和过滤表达式等功能,帮助测试人员便捷地处理JSON响应。

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

什么是json

一般来说,符合json格式的字符串通常为:{"key":"value"},从传值效果来说,等价于key=value。

  • 它可以有多个键值{"key1":"value1", "key2":"value2"}。

  • value可以是普通的字符串,也可以是数值、boolean值、数组和json对象

为什么要用json提取器

对于服务器返回的内容为json字符串时,用json提取器能够更加快速方便的获得我们所需要的数据

JSON提取器详解

  • Apply to,该选项是用来控制正则表达式提取器的作用对象,可选对象有三种:

  • main sample,主请求

  • sub sample,子请求

  • JMeter Variable,JMeter的变量

  • name of variables,变量名称,由用户自定义,用于存储数据

  • 变量名称可以写多个,使用逗号进行分隔

  • Json Path expressions,JsonPath表达式,即用来提取数据的

  • 该处可以填写多个JsonPath表达式,要求数量和变量名称的数量保持一致,每个表达式提取到的值将会按照位置传给变量

  • 匹配数字,该处可以填写的数字有3种:

  • 0,是默认值,表示随机,即将多次找到的结果随机抽取一个赋值给变量

  • 正整数N,表示将第N次找到的结果赋值给变量

  • 负数,一般填写-1,表示将所有找到的值以类似数组的方式存入变量数组,效果为varName_1=value1, varName_2=value2,并且同时会自动生成一个变量varName_matchNr=N用来存储值得个数

一般来说当匹配数字为-1时,就表示我们对变量数组中的值的处理诉求通常有2种:
遍历:表示一次使用一个,使用N次,一般结合foreach控制器来实现,将变量名作为输入变量前缀
allin:表示一次使用所有的值,值要按业务进行拼装,一般结合beanshell后置处理器来实现数据拼装
  • default values,默认值,如果变量名称只有一个,则该处可以省略,如果变量名称有多个,则该处必须有值。值的数量必须要和变量名称的数量保持一致,使用逗号分隔,一般建议填写1,1,1,...

JsonPath语法详解

  • 基本操作符

  • $ 根节点

  • @ 当前节点,一般来说用于子表达式或者过滤表达式

  • . or [] 用于连接父子节点

$.key.key.key要求key的值都是json对象,才可以继续使用点号连接
[]是用来筛选子节点,构成一个新的json对象。$["data"]等价于$.data,它最主要的作用在于$["data","name"],这个表达式返回2个同级节点构成的新json对象。
  • .<name> Dot-notated方式,获取子节点

  • ['<name>'(, '<name>')] Bracket-notated,获取一个或者多个子节点

  • .. 深层扫描,用于获取当前节点下的所有指定对象,表示从当前节点开始搜索所有的子节点

  • * 通配符

  • [<nubmber>(, <number>)] 数组索引,如果有多个用逗号分隔

  • [start:end] 数组切片操作

  • [?(<expression>)] 过滤表达式

  • 数组操作

  • $.xx表示获取xx整个数组的值

  • $.xx[*]表示获取xx数组节点的所有元素的值

  • $.xx[index]表示根据下标获取xx数组节点的某个元素的值,0表示数组中的一个元素

  • $.xx[index1,index2,index3]表示获取xx数组的枚举下标的元素值

  • $.xx[start:end]表示获取的是[start,end)左闭右开区间的下标的值,若start为空则表示默认为0,即从第1个元素开始取值;若end为空则表示默认获取到最后一个元素

start和end可以为负数,如果为负数,则只能存在start或者end。负数表示倒数第N个元素。
$.xx[-2:]表示获取倒数2个元素;$.xx[:-2]表示获取除倒数2个元素之外的其它元素。
  • 过滤表达式,是用来获取数组中符合条件的元素值的表达式

  • @表示数组中的当前元素

  • 常用操作符有

==、!=、<、<=、>、>=
=~ 正则匹配
In 存在于
Nin 不存在于
Subsetof 子集
|| 或者
&& 并且

例子:
$.data.student[?(@.age>"25")].name 获取年龄大于25岁的所有学生姓名,其中服务器返回的年龄如果带双引号,那么此处要加双引号,反之不加
$.data.student[?(@.isVIP==false)] 获取不是vip的所有学生的信息
$.data.student[?(@.age>"25" || @.sex== 'male')] 获取年龄大于25岁的所有男生信息
$.data.student[?(@.grade.avg()>90)] 获取grade的平均值大于90的学生信息
$.data.student[?(@.name=~/张.*/)] 获取姓张的学生信息
$.data.student[?(@.age in ["20", "25"]] 获取年龄为20或25的学生信息
$.data.student[?(@.hobby subsetof ["book","game","football"])]
  • JPath函数

Min()
Max()
Avg()
Stddev()
Length()

<think>嗯,用户想在JMeter里使用JSON提取器,得先理解JSON提取器的作用。根据提供的引用,JSON提取器是用来从JSON响应中提取数据的,类似于正则表达式提取器,但专门处理JSON格式。首先,用户需要知道如何添加这个元件,应该是在HTTP请求下作为后置处理器添加。接着,可能需要配置几个关键参数,比如变量名称、JSON路径表达式,还有默认值。 用户可能需要一个具体的例子来理解怎么操作。比如,假设响应是一个包含用户信息的JSON对象,想提取用户名。这时候JSON路径应该是类似$.user.name这样的表达式。然后,在后续的请求中用${username}来引用这个变量。引用里提到可以用Debug Sampler来验证提取结果,这应该也很重要。 还要注意常见的JSON路径写法,比如根节点用$,数组索引用[0],通配符*的使用。可能用户会遇到路径写错的问题,这时候测试按钮就派上用场了,点击测试可以看结果对不对。另外,多个变量提取的情况,比如需要多个字段,这时候每个变量对应不同的JSON路径,变量名用分号隔开。 有没有可能用户遇到的困难是路径表达式写错了?比如嵌套结构或者数组处理。比如,如果响应是数组,提取第一个元素的话需要索引,或者用通配符取所有元素。还可能默认值的问题,如果路径不存在,是否设置了默认值避免脚本失败。 另外,引用里提到JSON提取器必须放在能返回JSON的采样器下,作为子节点。这点用户需要注意位置是否正确。可能用户没看到提取结果,可能是因为位置放错了,或者响应不是正确的JSON格式。 总结步骤的话,应该是:添加JSON提取器,配置变量名和路径,测试路径是否正确,使用变量后续请求,验证结果。同时,提供示例代码和常见问题,比如路径写法、多个变量处理,这样用户能一步步跟着操作。</think>### 如何在 JMeter 中使用 JSON 提取器 #### 1. **添加 JSON 提取器** - 在需要提取数据的 HTTP 请求下,右键选择 `添加 > 后置处理器 > JSON 提取器`[^3][^4]。 - 确保该元件位于返回 JSON 数据的采样器(如 HTTP 请求)的子节点位置[^3]。 #### 2. **配置 JSON 提取器参数** - **变量名称(Names of created variables)**:定义存储提取值的变量名(如 `username`)。 - **JSON路径表达式(JSON Path Expressions)**:输入 JSONPath 表达式(如 `$.data.user.name`)。 - **匹配数字(Match No.)**:若结果为数组,可指定索引(如 `0` 表示第一个元素)。 - **默认值(Default Value)**:当路径不匹配时返回的默认值[^2]。 #### 3. **编写 JSONPath 表达式示例** - 提取单个字段:`$.key`(如 `$.id`)。 - 提取数组第一个元素:`$.list[0].value`。 - 通配符提取所有匹配项:`$.items[*].name`。 #### 4. **验证 JSONPath 表达式** - 在 JSON 提取器中输入路径后,点击 `Test` 按钮,下方会显示提取结果。 - 使用 `Debug Sampler` 查看变量值是否正确[^5]。 #### 5. **在后续请求中使用变量** - 通过 `${变量名}` 引用提取的值(如 `${username}`)[^5]。 --- ### 完整示例 **场景**:从以下 JSON 响应中提取用户 ID 和姓名: ```json { "data": { "user": { "id": 101, "name": "John" } } } ``` **步骤**: 1. 添加 JSON 提取器到 HTTP 请求下。 2. 配置: - 变量名称:`user_id;user_name`(多个变量用分号分隔)。 - JSON路径表达式:`$.data.user.id;$.data.user.name`。 - 匹配数字:`1`(默认)。 - 默认值:`NOT_FOUND`。 3. 在后续请求中使用 `${user_id}` 和 `${user_name}`。 --- ### 常见问题 1. **JSONPath 语法错误** - 确保路径以 `$` 开头,字段用 `.` 分隔(如 `$.data.user`)。 - 嵌套对象或数组需用索引或通配符(如 `$.list[0]` 或 `$.items[*]`)[^4]。 2. **未提取到值** - 检查响应是否为**标准 JSON 格式**。 - 使用 `View Results Tree` 监听器确认响应内容。 3. **多值提取** - 若需提取多个字段,在变量名称和 JSON 路径中用分号分隔(如 `var1;var2` 和 `$.path1;$.path2`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值