JMeter如何遍历JSON响应获取所有键及对应值?
在JMeter中提取JSON响应的所有键值对
你可以修改原Groovy代码,让它同时返回完整路径键和对应的值。核心改动是把原来仅收集键的逻辑,改成收集键与值的映射(或直接输出键值对),同时适配数组和嵌套结构的遍历场景。
修改后的代码如下:
import groovy.json.JsonSlurper def traverse traverse = { tree, keyValuePairs = [], prefix = '' -> switch (tree) { case Map: tree.each { k, v -> def currentKey = prefix ? "${prefix}.${k}" : k // 仅当值为基础类型时记录键值对,跳过中间嵌套节点 if (!(v instanceof Map) && !(v instanceof Collection)) { keyValuePairs << ["key": currentKey, "value": v] } traverse(v, keyValuePairs, currentKey) } return keyValuePairs case Collection: tree.eachWithIndex { e, i -> def currentKey = "${prefix}[$i]" // 数组元素为基础类型时直接记录 if (!(e instanceof Map) && !(e instanceof Collection)) { keyValuePairs << ["key": currentKey, "value": e] } traverse(e, keyValuePairs, currentKey) } return keyValuePairs default: return keyValuePairs } } def content = new JsonSlurper().parseText(prev.getResponseDataAsString()) // 遍历后输出所有键值对 traverse(content).each { pair -> println "${pair.key} = ${pair.value}" }
输出示例:
devices[24].creationDate = 2024-01-01 devices[24].updateDate = 2024-05-20 devices[24].attributes.name = 设备A devices[24].attributes.location = 机房1 devices[24].attributes.latitude = 30.1234 devices[25].deviceId = D20240520001 devices[25].deviceStatus = online
可选调整说明:
- 如果需要保留中间嵌套节点(比如
devices[24].attributes这类Map/数组本身),可以去掉代码中的类型判断,直接在遍历Map/Collection时记录键和当前值 - 输出格式可按需修改,比如改为JSON格式
"${pair.key}":"${pair.value}",或者将键值对存入JMeter变量供后续组件使用
内容的提问来源于stack exchange,提问作者sarjaana
相关产品推荐
相关产品推荐

