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

使用Rest Assured将String数组插入JSONArray时的异常问题排查

解决Rest Assured中JSONArray插入字符串数组的异常问题

我完全懂你碰到的麻烦——明明tokenUUIDs数组能拿到正确的字符串值,结果把它放进JSONArray后却输出了[[Ljava.lang.String;@6fc0bbc6这种像对象内存地址的奇怪内容。这问题其实很好解决,我来给你拆解下:

问题根源

你现在是直接把整个String[]数组对象传给了JSONArray.add()方法,而这个方法会把传入的数组当作单个对象来存储,序列化时就会输出数组对象的默认toString()结果,也就是你看到的那种格式,而不是把数组里的每个字符串元素拆出来放进JSON数组里。

两种修复方案

方案1:遍历数组逐个添加元素

最直观的方式就是循环遍历tokenUUIDs数组,把每个字符串单独加入JSONArray:

JSONArray ArraytokenUUIDs = new JSONArray();
// 遍历字符串数组,逐个添加到JSONArray中
for (String token : tokenUUIDs) {
    ArraytokenUUIDs.add(token);
}

方案2:直接用数组初始化JSONArray

如果你使用的是org.json库(从你的代码写法来看应该是这个),可以直接利用JSONArray的构造函数,传入字符串数组就能自动完成元素拆分:

// 直接用字符串数组初始化JSONArray,一步到位
JSONArray ArraytokenUUIDs = new JSONArray(tokenUUIDs);

修改后的完整代码片段

把你原来的JSONArray初始化部分替换成上面任意一种方案就行,比如:

public static void releaseTokens(String[] tokenUUIDs ) {
 try{
 RequestSpecification request = RestAssured.given();
 request.header("Content-Type", "application/json");
 JSONObject releaseTokens = new JSONObject();
 releaseTokens.put("partnerCode", commonOps.partnerCode);
 releaseTokens.put("apiAccessToken",commonOps.openAccessToken);
 releaseTokens.put("sessionUUID",SessionUUID);
 releaseTokens.put("taskUUID","TaskUUID");
 // 替换成方案2的写法,简洁高效
 JSONArray ArraytokenUUIDs = new JSONArray(tokenUUIDs);
 releaseTokens.put("tokenUUIDs", ArraytokenUUIDs);
 request.body(releaseTokens.toJSONString());
 Response response = request.post((getData("APIenv") + "/api/sessions/releaseTokens.php"));
 // 后续断言和日志代码保持不变...

这样修改后,生成的JSON里tokenUUIDs字段就会变成正常的字符串数组格式,比如["uuid1", "uuid2", "uuid3"],不会再出现那个奇怪的对象标识了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:05:33