将所有值 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));
我正在使用 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));