簡體   English   中英

JsonArray 未添加所有 JsonObjects

[英]JsonArray is not adding all JsonObjects

當我添加測試 JsonObjects 列表時,只有最后一個 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);

您需要在 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();

測試運行.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
    }
}

帶有main方法的類:

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());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM