如何使用JMeter获取JSON响应中首个同名字段的值
在JMeter中提取JSON重复字段的首次出现值
我需要从JSON响应中获取同名但值不同的字段的首次出现值。例如,我要获取多次出现的"status"字段的首个值,即"new",对应的JSON示例如下:
{"ticketId":"216574537","timestamp":"3699689369843","targetType":"TMDeviceTicket","number":"4","time":"03/16/2018 11:30:00","status":"new","partOns":[],"itrEtrs":[{"componentId":"218318169","creationTimestamp":"03/28/2018 11:07:00","deviceType":"LAT","itrFlag":"false","restorationTimestamp":"03/28/2018 16:00:00","stormMode":"N"},{"oopId":"116400085","timestamp":"3699689369919","targetType":"TMRepairActionRefuseLateral","auto":"true","description":"Refuse B Lateral","deviceFplId":"268221704","actualDeviceType":"LATU","deviceDdbKey":"8614152820","deviceTroubleCoordinateX":"863937","deviceTroubleCoordinateY":"459296","childDevices":"List(268233640, 268233641, 268233642)","previousProtectiveDeviceStack":"List(23282601, 23281142)","discSwitch":"Refuse B Lateral","fuseSize":"65","fuseType":"K","operatedDevice":"fuse","overhead":"false","phase":"B","rcOff":"false","resolutionDateTime":"03/28/2018 11:29:00","scheduled":"true","status":"complete","view":"Lateral","identitySetRepairAction":[]}]请问如何使用JMeter实现该需求?
方法1:用JSON Extractor(最简单推荐)
这是JMeter自带的专用JSON提取工具,配置零代码,新手友好:
- 右键点击你的HTTP请求,选择
Add > Post Processors > JSON Extractor - 在配置界面填写:
- Reference Name:自定义变量名,比如
first_status(后续用这个变量调用结果) - JSON Path Expression:直接写
$.status——这个表达式会精准匹配根节点下的第一个status字段(也就是你要的"new") - Match No.:填
1(或者留空,默认就是取第一个匹配项) - 其他参数保持默认即可
- Reference Name:自定义变量名,比如
配置完成后,后续请求或断言里直接用${first_status}就能引用提取到的首个status值了。
方法2:用JSR223 PostProcessor(更灵活)
如果需要扩展复杂逻辑,或者习惯用代码处理,推荐用Groovy脚本实现:
- 右键点击HTTP请求,选择
Add > Post Processors > JSR223 PostProcessor - Script Language选择
Groovy(性能比其他脚本语言更优) - 在Script框中输入以下代码:
import groovy.json.JsonSlurper // 获取接口响应内容 def response = prev.getResponseDataAsString() def json = new JsonSlurper().parseText(response) // 直接提取根节点的status(第一个出现的同名字段) def firstStatus = json.status // 将结果存入JMeter变量 vars.put("first_status", firstStatus)
同样,后续可以通过${first_status}调用提取到的值。
为什么能拿到第一个值?
JSON解析时,根节点的status是最外层的首个匹配项,不管嵌套结构里有没有同名字段,$.status或直接访问json.status都会优先读取根节点的这个值,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Dipankar Ghosh
相关产品推荐
相关产品推荐

