当前位置: 首页 > 知识库问答 >
问题:

JsonArray没有添加所有JsonObject

越霖
2023-03-14

当我添加测试JsonObject列表时,只有最后一个JsonObject被添加到JsonArray。我不明白为什么,因为我遵循oracle的留档。https://docs.oracle.com/javaee/7/api/javax/json/JsonArray.html

名为TestRun的类中的方法

public JsonObject convertToJSONObject() {
        return Json.createObjectBuilder()
                .add("name", name)
                .add("value", value)
                .add("timestamp", convertZonedDateTime())
                .build();
    }

    public JsonArray convertToJSONArray(JsonObject object) {
        return Json.createArrayBuilder()
                .add(object)
                .build();
    }

Main(注意:我使用faker生成随机信息)

TestRun testRun;
        Faker faker = new Faker(); //Faker to generate random level_name
        JsonArray jsonArray = null;


        for (int i = 0; i < 2; i++) {
            testRun = new TestRun(faker.name().firstName(), faker.number().numberBetween(1, 200));
            JsonObject object = testRun.convertToJSONObject();
            jsonArray = testRun.convertToJSONArray(object);
        }
        System.out.println(jsonArray);

共有2个答案

黄君博
2023-03-14

测试运行。Java语言

import javax.json.Json;
import javax.json.JsonObject;
import java.time.ZonedDateTime;

public class TestRun {
    private String name;
    private Integer value;
    private ZonedDateTime timestamp;

    public TestRun(String name, Integer value, ZonedDateTime timestamp) {
        this.name = name;
        this.value = value;
        this.timestamp = timestamp;
    }

    public JsonObject convertToJSONObject() {
        return Json.createObjectBuilder()
                .add("name", name)
                .add("value", value)
                .add("timestamp", convertZonedDateTime())
                .build();
    }

    private String convertZonedDateTime() {
        return timestamp.toString(); // replace with yours code
    }
}

使用主方法初始化:

import com.github.javafaker.Faker;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import java.time.ZonedDateTime;

public class FakerExample {

    public static void main(String[] args) {
        Faker faker = new Faker();
        JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder();

        for (int i = 0; i < 2; i++) {
            var testRun = new TestRun(faker.name().firstName(), faker.number().numberBetween(1, 200), ZonedDateTime.now());
            JsonObject object = testRun.convertToJSONObject();
            jsonArrayBuilder.add(object);
        }

        System.out.println(jsonArrayBuilder.build());
    }
}
尉迟京
2023-03-14

您需要在for循环内部创建一个JsonArrayBuilder,而不是在每个步骤创建JsonArray。然后在for循环外部构建生成器,如下所示:

JsonArrayBuilder arrayBuilder = null;
for (int i = 0; i < 2; i++) {
      testRun = new TestRun(faker.name().firstName(), faker.number().numberBetween(1, 200));
      JsonObject jsonObject = testRun.convertToJSONObject();
      if (arrayBuilder == null) {
         arrayBuilder = Json.createArrayBuilder().add(jsonObject);
      } else {
         arrayBuilder = arrayBuilder.add(jsonObject);
      }

}

jsonArray = arrayBuilder.build();
 类似资料:
  • 问题内容: 我今天在这个主题上搜索了很多。但是我找不到它,如何将JSONArray添加到JSONObject? 因为每次执行此操作都会收到此错误:Stackoverflow 我收到此错误: 我想要的JSON:只有最后一个JsonArray出问题了: ,“ vloer”:[{formaat:’vierkant10x15’tegels:[{naam:’‘,imgThumb:’/bla/bla.png’

  • 问题内容: 如何将所有从mysql_query的行添加到mysql_fetch_array()?我希望能够尽可能有效地执行此操作,因为它可以处理很多行。 问题答案: 最常见的方式: 如文档中的示例所示。

  • 问题内容: 大家好,我不是Json最好的。我试图通过循环将一些json对象添加到json数组中,但是问题是每次涉及到循环时,新数据也会遍历数组中的先前数据。这是我的代码: 给定X.size = 2的示例 我希望我的例子足够清楚。 如果有人能在这里帮助我,我将不胜感激。 问题答案: 您需要在循环的每次迭代中创建一个新的引用: 否则,您将一遍又一遍地更新同一实例,并将对同一对象的引用多次添加到数组中。

  • 问题内容: 我有一个前缀要添加到每条路线。现在,我在每个定义处都向路线添加了一个常量。有没有一种方法可以自动执行此操作? 问题答案: 答案取决于你如何为该应用程序提供服务。 安装在另一个WSGI容器中 假设你将在WSGI容器(mod_wsgi,uwsgi,gunicorn等)中运行此应用程序;你实际上需要将该应用程序作为该WSGI容器的子部分挂载在该前缀处(任何讲WSGI的东西都可以使用),并将A

  • 这是我的的商店代码片段,包含商品和价格: 这是我的杂货车,其中int表示一辆车中每件商品的数量。我对HashMaps非常陌生,对于如何将stock map引用到price方法中并正确地将其相加感到非常困惑。理论上,这个问题的最终答案是2个鸡蛋和2盒橙汁的价格。非常感谢您的帮助

  • 这似乎不起作用。 我还尝试在代码生成器使用的xml中添加架构名称,如 http://www.jooq.org/doc/3.5/manual/code-generation/codegen-advanced/