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

JMeter中JSON Extractor如何按travelID长度提取BoundId

实现JMeter中按travelID长度条件提取BoundId的方法

完全可行,以下两种方法可实现需求:

方法一:使用JSON Extractor结合JSON Path表达式

利用JMeter JSON Extractor支持的正则匹配,直接通过JSON Path筛选符合条件的节点:

  1. 配置JSON Extractor时,将JSON Path Expression设置为:

    $..Itemdetails[?(@.availabilityDetails[*].travelID =~ /.{33}/)].BoundId
    

    该表达式会递归查找所有包含长度为33的travelID的Itemdetails节点,并提取对应的BoundId。

    • 原理:/.{33}/是正则表达式,匹配任意33个字符的字符串,精准对应travelID的长度要求;$..用于遍历所有层级的Itemdetails节点。
  2. 其他参数(如Reference Name、Match No.等)按原有需求配置即可。

方法二:使用JSR223 PostProcessor(Groovy脚本)

如果JSON Path的函数支持有限,用Groovy脚本可实现更灵活的逻辑:

  1. 添加JSR223 PostProcessor,选择Groovy作为脚本语言。
  2. 输入以下脚本:
    import groovy.json.JsonSlurper
    
    def responseBody = prev.getResponseDataAsString()
    def json = new JsonSlurper().parseText(responseBody)
    def targetBoundId = null
    
    json.data.RenewalDetails.each { renewal ->
        renewal.Itemdetails.each { item ->
            item.availabilityDetails.each { avail ->
                if (avail.travelID?.length() == 33) {
                    targetBoundId = item.BoundId
                    return // 找到第一个匹配项后退出循环
                }
            }
            if (targetBoundId) return
        }
    }
    
    if (targetBoundId) {
        vars.put("BoundId", targetBoundId) // 将结果存入变量供后续使用
    }
    
    脚本会遍历响应JSON的层级结构,检查每个travelID的长度,符合条件时提取对应的BoundId并存入JMeter变量。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:55:11