You need to enable JavaScript to run this app. 使用Beanshell断言提取JSON值校验字段时脚本报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Beanshell断言提取JSON值校验字段时脚本报错如何解决

错误原因

你的脚本一共存在5处问题:

  • 语法错误:第9行提取last_name的代码存在非法引号嵌套,同时你误用了JSONPath表达式,org.json 原生包不支持直接传入$data[0].last_name这种JSONPath格式的参数取值
  • 取值逻辑错误:org.json 包取数组内对象的字段需要分步操作:先取data数组、再取数组内第一个元素、最后取元素的last_name属性,不能一步直接传入路径取值
  • 字符串比较错误:Java/Beanshell中==比较的是字符串对象的内存地址,不是实际内容,需要用equals()方法比较内容
  • 逻辑冗余:else分支不需要再判断lastName != "lawson",if已经覆盖了等于的场景,else天然就是不等于的场景
  • 大小写不匹配:接口返回的last_name是首字母大写的Lawson,你判断用的是全小写的lawson,就算语法对也会判定不通过
修复后的完整脚本
import org.json.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);
// 分步提取字段:先取data数组,再取第一个元素,再取last_name
JSONArray dataArray = responseJson.getJSONArray("data");
JSONObject firstItem = dataArray.getJSONObject(0);
String lastName = firstItem.getString("last_name");

String Message= "";
// 需要忽略大小写判断可以把equals换成equalsIgnoreCase
if (lastName.equals("Lawson"))
{
    Failure= false;
    Message= Message+"Correct value";
    FailureMessage= Message;
}
else
{
    Failure= true;
    Message= Message+"Incorrect value: "+lastName;
    FailureMessage= Message;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:45:01