将所有值 List<String> 直接复制到 Jackson JsonGenerator Array 而不是循环它

Copy all values List<String> to Jackson JsonGenerator Array directly instead of looping over it

我正在使用 Jackson JsonGenerator 创建一个 JSON 文件,我需要为其添加来自 List<String> 的元素。此 List 由需要添加到我的最终 JSON 文件中的 JSON Fragments 组成。

截至目前,我正在遍历 List<String> 并将它们逐一添加到我的 Jackson JsonGenerator writeRaw 中。到目前为止,这一切正常。但是,我的 List 可以有 1000 或更多的值,那么我不希望循环并一个一个地添加。而不是那样,我正在寻找一种直接将数组添加到 JsonGeneator 数组的方法。我想知道是否有一种方法可以像这样直接复制数组:

jsonGenerator.writeArray("eventList",eventsList);

以下是我目前的代码:

public class JacksonTest {
    public static void main(String[] args) throws IOException {

        List<String> eventsList = new ArrayList<>();
        eventsList.add("{\n" + "  \"isA\": \"Customer\",\n" + "  \"name\": \"Rise Against\",\n" + "  \"age\": \"2000\"\n" + "}");
        eventsList.add("{\n" + "  \"isA\": \"Owener\",\n" + "  \"name\": \"Linkin Park\",\n" + "  \"age\": \"2ßß8\"\n" + "}");
        eventsList.add("{\n" + "  \"isA\": \"Customer\",\n" + "  \"name\": \"Breaking Benjamin\",\n" + "  \"age\": \"2005\"\n" + "}");

        StringWriter jsonObjectWriter = new StringWriter();
        JsonGenerator jsonGenerator = new JsonFactory().createGenerator(jsonObjectWriter).useDefaultPrettyPrinter();
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("schema","2.0");
        jsonGenerator.writeStringField("date","2021-06-22");


        //Current Approach
        jsonGenerator.writeFieldName("eventList");
        jsonGenerator.writeStartArray();

        //Add events from the list one by one
        eventsList.forEach(event -> {
            try {
                jsonGenerator.writeRaw(event + ",");
            } catch (IOException e) {
                e.printStackTrace();
            }
        });

        jsonGenerator.writeEndArray();
        jsonGenerator.writeEndObject();
        jsonGenerator.close();
        jsonGenerator.flush();

        System.out.println(jsonObjectWriter.toString());
    }
}

正如您从上面的代码中看到的那样,我正在遍历 List<String> 并将它们一个接一个地添加到 JsonGeneator 中。有人可以建议是否有办法直接将 List<String> 添加到 JsonGenerator 以便我可以跳过 looping 部分。

JSONObject中有类似的东西,我们可以直接添加列表:

final JSONObject doc = new JSONObject();
doc.put("schemaVersion", 2.0);
final JSONObject eventListAsJson = new JSONObject();
eventListAsJson.put("eventList", eventsList);
doc.put("eventList", eventListAsJson);

如有任何帮助或建议,我们将不胜感激。

    ObjectNode objectNode = new ObjectMapper().createObjectNode();
    objectNode.put("schema", "2.0");
    objectNode.put("date", "2021-06-22");

    ArrayNode arrayNode = new ObjectMapper().createArrayNode();
    for (String s : eventsList) {
        arrayNode.add(new ObjectMapper().readValue(s, ObjectNode.class));
    }
    objectNode.set("eventList", arrayNode);

    System.out.println(objectNode.toPrettyString());

正如@Thomas 所指出的,我执行了以下操作以将 LIST 中的元素添加到我的 JsonGenerator 中:

jsonGenerator.writeRaw(String.join(",", eventsList));