繁体   English   中英

如何使用 Jackson 流式 API 编写地图列表

[英]How to write list of maps using Jackson Streaming API

通过一些阅读,我看到了 Jackson 流式传输 API 的以下示例。 他们正在为一张 object(一种地图)写作。 任何人都可以帮助我如何编写多个对象。 就像地图列表一样。

jsonFactory jfactory = new JsonFactory();

/*** write to file ***/
JsonGenerator jGenerator = jfactory.createJsonGenerator(new File(
        "c:\\user.json"), JsonEncoding.UTF8);
jGenerator.writeStartObject(); // {

jGenerator.writeStringField("name", "mkyong"); // "name" : "mkyong"
jGenerator.writeNumberField("age", 29); // "age" : 29

jGenerator.writeFieldName("messages"); // "messages" :
jGenerator.writeStartArray(); // [

jGenerator.writeString("msg 1"); // "msg 1"
jGenerator.writeString("msg 2"); // "msg 2"
jGenerator.writeString("msg 3"); // "msg 3"

jGenerator.writeEndArray(); // ]

jGenerator.writeEndObject(); // }

jGenerator.close();

我尝试循环并得到以下结果。

{“Item1label1”:”Item1value1”,”Item1label2”:”Item1value2"} {“Item2label1”:”Item2value1”,”Item2label2”:”Item2value2"}   

但这不是有效的 JSON。 由于两个对象之间缺少某些东西。 必须制作什么代码才能使其有效 JSON。

下面是使用writePOJOField方法编写大量对象的示例(此处为HashMap ,但可以是其他任何对象)。 我使用jackson-corejackson-databind (请参阅https://github.com/FasterXML/jackson )。

// given
ByteArrayOutputStream stream = new ByteArrayOutputStream();
JsonFactory jfactory = new JsonFactory(new ObjectMapper());
JsonGenerator jGenerator = jfactory.createGenerator(stream, JsonEncoding.UTF8);

// when
jGenerator.writeStartObject();
jGenerator.writeStringField("name", "Tom");
jGenerator.writeNumberField("age", 25);

jGenerator.writeFieldName("objects");
jGenerator.writeStartArray();
IntStream.range(0, 3).forEach(it -> {
    try {
        jGenerator.writePOJO(new HashMap<String, String>() {{
            put("key1", "value1");
            put("key2", "value2");
        }});
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
});
jGenerator.writeEndArray();

jGenerator.writeFieldName("strings");
jGenerator.writeStartArray();
jGenerator.writeString("textX");
jGenerator.writeString("textY");
IntStream.range(0, 3).forEach(it -> {
    try {
        jGenerator.writeString("text-" + it);
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
});
jGenerator.writeEndArray();

jGenerator.writeNullField("nullField");
jGenerator.writeEndObject();
jGenerator.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM