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

Java中JsonArray添加多个JsonObject仅保留最后一个对象的问题

问题根因

代码逻辑存在两处核心错误,导致最终数组只保留最后一个对象:

  • javax.json API提供的JsonArray属于不可变集合:通过数组构造器调用build()方法生成的JsonArray实例一旦创建完成,就不支持新增、删除、修改内部元素。
  • 循环赋值逻辑完全错误:你写的convertToJSONArray方法每次调用时,都会新建一个独立的数组构造器,仅传入当前的单个JsonObject就直接build成长度为1的新数组,再把这个新数组直接赋值给jsonArray变量。相当于每次循环都把上一轮生成的数组直接丢弃,替换成只装了当前对象的新数组,循环结束后变量里自然只存了最后一次生成的单元素数组。
修正方法

不要在每次循环里新建数组构造器,把构造器初始化放到循环外面,循环过程中持续往同一个构造器追加对象,等所有元素都添加完成后,再统一调用build()生成最终的JsonArray即可。
你可以直接删掉TestRun里那个每次新建数组的convertToJSONArray方法,把主方法逻辑调整为如下代码:

TestRun testRun;
Faker faker = new Faker();
// 循环外初始化唯一的数组构造器
JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();

for (int i = 0; i < 2; i++) {
    testRun = new TestRun(faker.name().firstName(), faker.number().numberBetween(1, 200));
    JsonObject jsonObj = testRun.convertToJSONObject();
    // 往同一个构造器中追加当前生成的对象
    arrayBuilder.add(jsonObj);
}
// 所有元素添加完成后,统一构建最终数组
JsonArray jsonArray = arrayBuilder.build();
System.out.println(jsonArray);

注意:javax.json下的所有Builder类都是一次性生成不可变实例的设计,不管是对象构造器还是数组构造器,调用build()后产出的Json对象/数组就完全固定。如果需要批量组装元素,一定要在所有元素都添加完成后再调用build(),不要提前build再尝试修改生成的不可变实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:51:21