【发布时间】:2021-09-05 18:55:03
【问题描述】:
我正在使用Jackson JsonGenerator 创建一个JSON 文件,我需要为其添加来自List<String> 的元素。这个List 由JSON Fragments 组成,需要添加到我的最终JSON 文件中。
截至目前,我正在循环访问 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);
非常感谢任何帮助或建议。
【问题讨论】:
-
像
writeArray("eventList",eventsList);这样的调用可能无论如何都会在内部循环,所以你不会在这里获得太多。但是您可以尝试先构建 json 字符串,然后调用writeRaw(),例如writeRaw(String.join(",", eventsList)). -
非常感谢您的回复和您的时间。这也可能会有所帮助,因为我不必在这里明确循环,并且一切都在内部处理。
标签: java arrays json jackson jackson2