JMeter中键未知时如何提取JSON的键与值?
解决JMeter中未知JSON键的提取问题
针对你提到的两个JMeter JSON提取相关问题,我给你整理了具体的解决办法:
1. 提取未知键对应的JSON值
如果你的JSON响应里键是随机生成的,但需要提取对应的值,有两种实用方式:
方式一:用JSON Extractor的通配符
在JSON Extractor里,把JSON Path表达式设为 $.*,这个表达式会匹配根节点下的所有值,返回一个值数组。
- 假设你把变量名设为
random_values,那么可以通过${random_values_1}获取第一个值,${random_values_2}获取第二个值,以此类推。 - 这种方法适合结构简单、键数量固定的场景,比如你示例里的两个键的情况。
方式二:用JSR223 PostProcessor灵活处理
如果键的数量不固定,或者需要更复杂的逻辑,推荐用Groovy脚本(JMeter里Groovy性能最优):
- 添加一个JSR223 PostProcessor到目标请求下面
- 在脚本框里输入以下代码:
import groovy.json.JsonSlurper def response = prev.getResponseDataAsString() def json = new JsonSlurper().parseText(response) // 遍历所有值,保存到变量 def index = 1 json.each { key, value -> vars.put("value_${index}", value.toString()) index++ }
脚本会自动遍历所有键值对,把每个值保存到value_1、value_2这类变量里,后续直接调用即可。
2. 提取未知的JSON键本身
JSON Extractor本身不支持直接提取键名,所以同样需要用JSR223 PostProcessor来实现:
步骤和上面类似,把脚本改成:
import groovy.json.JsonSlurper def response = prev.getResponseDataAsString() def json = new JsonSlurper().parseText(response) // 获取所有键,保存到变量 def keys = json.keySet() as List def index = 1 keys.each { key -> vars.put("key_${index}", key) index++ } // 如果需要把所有键拼接成一个字符串,可添加这行: vars.put("all_keys", keys.join(","))
执行后,key_1、key_2会分别对应示例里的sadasd123242和dadsadaskljk,all_keys则是用逗号分隔的所有键字符串。
如果场景里只有一个未知键,还可以简化脚本:
import groovy.json.JsonSlurper def response = prev.getResponseDataAsString() def json = new JsonSlurper().parseText(response) def firstKey = json.keySet().iterator().next() vars.put("first_key", firstKey)
内容的提问来源于stack exchange,提问作者rutuja yewalekar
相关产品推荐
相关产品推荐

