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

JMeter Beanshell后置处理器JSON类型赋值错误求助

JMeter Beanshell后置处理器JSON数组处理错误解决

问题场景

在JMeter的Beanshell后置处理器中处理HTTP请求返回的JSON数组时出现错误,JMeter通过mvn jmeter:configure jmeter:gui命令启动,Maven插件配置如下:

<plugin>
    <groupId>com.lazerycode.jmeter</groupId>
    <artifactId>jmeter-maven-plugin</artifactId>
    <version>3.5.0</version>
    <executions>
        ....
    </executions>
    <configuration>
        <generateReports>true</generateReports>
        <testFilesIncluded>
           ....
        </testFilesIncluded>
        <jmeterVersion>5.4.3</jmeterVersion>
        <ignoreResultFailures>true</ignoreResultFailures>
        <testPlanLibraries>
            <artifact>com.googlecode.json-simple:json-simple:1.1.1</artifact>
            <artifact>com.fasterxml.jackson.core:jackson-databind:2.14.1</artifact>
            <artifact>com.github.javafaker:javafaker:1.0.2</artifact>
        </testPlanLibraries>
        <jmeterExtensions>
            <artifact>kg.apc:jmeter-plugins-manager:1.6</artifact>
            <artifact>kg.apc:jmeter-plugins-standard:1.4.0</artifact>
            <artifact>kg.apc:jmeter-plugins-common:1.4.0</artifact>
            <artifact>kg.apc:jmeter-plugins-extras:1.4.0</artifact>
            <artifact>kg.apc:jmeter-plugins-extras-libs:1.4.0</artifact>
            <artifact>com.blazemeter:jmeter-parallel:0.11</artifact>
        </jmeterExtensions>
        .....
    </configuration>
</plugin>

使用的Beanshell脚本:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject;
JSONObject jsonArray;
try {
    jsonObject = (JSONObject)jsonParser.parse(prev.getResponseDataAsString());
    jsonArray = (JSONArray)jsonObject.get("value");

//    List<JSONObject> jsonList = new ArrayList();
//    if (jsonArray != null) {
//        for (Object object : jsonArray) {
//            JSONObject jsonObj = (JSONObject)object;
//            jsonList.add(jsonObj);
//        }
//    }

} catch (Exception e) {
    e.printStackTrace();
}
log.info("jsonArray: " + jsonArray);

执行时出现的错误(已翻译为中文):

调用bsh方法出错:eval 源文件:内联执行代码:import org.json.simple.JSONArray; import org.json.simple.JSONObject; import o . . . '' : 变量赋值错误: jsonArray: 无法将org.json.simple.JSONArray类型赋值给org.json.simple.JSONObject类型 BeanShell脚本问题: org.apache.jorphan.util.JMeterException: 调用bsh方法出错: eval 源文件:内联执行代码: import org.json.simple.JSONArray; import org.json.simple.JSONObject; import o . . . '' : 变量赋值错误: jsonArray: 无法将org.json.simple.JSONArray类型赋值给org.json.simple.JSONObject类型

报错具体行:jsonArray = (JSONArray)jsonObject.get("value");

错误原因

变量类型声明错误:脚本中将jsonArray变量声明为JSONObject类型,但实际从jsonObject.get("value")获取的是JSONArray对象,尝试将JSONArray赋值给JSONObject类型变量,导致类型不匹配错误。

解决方法

修改变量声明,将JSONObject jsonArray;改为JSONArray jsonArray;,修正后的完整脚本如下:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject;
JSONArray jsonArray; // 修正类型声明
try {
    jsonObject = (JSONObject)jsonParser.parse(prev.getResponseDataAsString());
    jsonArray = (JSONArray)jsonObject.get("value");

//    List<JSONObject> jsonList = new ArrayList();
//    if (jsonArray != null) {
//        for (Object object : jsonArray) {
//            JSONObject jsonObj = (JSONObject)object;
//            jsonList.add(jsonObj);
//        }
//    }

} catch (Exception e) {
    e.printStackTrace();
}
log.info("jsonArray: " + jsonArray);

额外提示:JMeter 5.4.3版本中,推荐使用JSR223后置处理器替代Beanshell,JSR223支持Groovy等脚本语言,性能更高且语法更简洁,处理JSON时可直接使用Groovy的内置JSON解析能力,无需额外导入json-simple依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:10:45