JMeter使用JsonPath提取器提取嵌套响应中userId值的正确语法问询
提取失败原因
你用$..ABC.response.userId无法匹配的核心原因是:响应结构里的ABC字段值是转义封装的JSON字符串,不是嵌套的JSON对象结构,JsonPath无法直接穿透字符串读取内部字段。
正确提取方案
方案1:两步JsonPath提取器实现
- 第一步:先新增第一个JsonPath提取器,针对原始响应使用表达式
$.ABC,将提取结果存为临时变量,比如命名为abc_json_str - 第二步:新增第二个JsonPath提取器,将
abc_json_str作为待解析的JSON数据源,使用表达式$.response.userId即可成功提取userId值
方案2:单步JSR223后置处理器实现(推荐,效率更高)
直接添加JSR223 PostProcessor,使用Groovy代码一次性解析提取,无需拆分多个提取器:
import groovy.json.JsonSlurper // 解析接口返回的原始JSON def rawResp = new JsonSlurper().parse(prev.getResponseData()) // 把ABC字段的JSON字符串解析为JSON对象 def abcContent = new JsonSlurper().parseText(rawResp.ABC) // 提取userId并存为JMeter变量,后续可直接通过${userId}调用 vars.put("userId", abcContent.response.userId.toString())
注意:你提供的响应示例里
userId对应的user1没有加双引号,不符合标准JSON语法,如果实际响应确实如此,推荐使用方案2的Groovy解析方式,兼容性比标准JsonPath提取器更好,不会因为格式不标准报错。
内容的提问来源于stack exchange,提问作者Vivek Kanna
相关产品推荐
相关产品推荐

