You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:42:45