Jackson - 将 Java 列表写入 json 数组的最佳方式 [英] Jackson - best way writes a java list to a json array

查看:36
本文介绍了Jackson - 将 Java 列表写入 json 数组的最佳方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 jackson 将 ArrayList 转换为 JsonArray.

Event.java :这是具有两个字段field1"、field2"映射为 JsonProperty 的 java bean 类.

我的目标是:

转换

ArrayListlist = new ArrayList();list.add(new Event("a1","a2"));list.add(new Event("b1","b2"));

<预><代码>[{"field1":"a1", "field":"a2"},{"field1":"b1", "field":"b2"}]

我能想到的方法是:writeListToJsonArray():

public void writeListToJsonArray() 抛出 IOException {ArrayList<事件>list = new ArrayList();list.add(new Event("a1","a2"));list.add(new Event("b1","b2"));OutputStream out = new ByteArrayOutputStream();JsonFactory jfactory = new JsonFactory();JsonGenerator jGenerator = jfactory.createJsonGenerator(out, JsonEncoding.UTF8);ObjectMapper mapper = new ObjectMapper();jGenerator.writeStartArray();//[对于(事件事件:列表){String e = mapper.writeValueAsString(event);jGenerator.writeRaw(用法);//在这里,写逗号分隔json对象很麻烦,当到达列表中的最后一个对象时,没有逗号}jGenerator.writeEndArray();//]jGenerator.close();System.out.println(out.toString());}

我正在寻找类似的东西:

generator.write(out, list)

这直接将列表转换为json数组格式,然后将其写入输出流out".

更贪婪:

generator.write(out, list1)generator.write(out, list2)

这只会将 list1、list2 中的转换/添加到单个 json 数组中.然后把它写到out"

解决方案

这太复杂了,Jackson 通过其 writer 方法处理列表就像处理常规对象一样.假设我没有误解您的问题,这对您来说应该很好用:

public void writeListToJsonArray() 抛出 IOException {最终列表<事件>list = new ArrayList(2);list.add(new Event("a1","a2"));list.add(new Event("b1","b2"));最终 ByteArrayOutputStream out = new ByteArrayOutputStream();final ObjectMapper mapper = new ObjectMapper();mapper.writeValue(out, list);final byte[] data = out.toByteArray();System.out.println(new String(data));}

I want to use jackson to convert a ArrayList to a JsonArray.

Event.java : this is the java bean class with two fields "field1", "field2" mapped as JsonProperty.

My goal is:

Convert

ArrayList<Event> list = new ArrayList<Event>();
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

To

[
{"field1":"a1", "field":"a2"},
{"field1":"b1", "field":"b2"}
]

The way I can think of is: writeListToJsonArray():

public void writeListToJsonArray() throws IOException {  
    ArrayList<Event> list = new ArrayList<Event>();
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

    OutputStream out = new ByteArrayOutputStream();

    JsonFactory jfactory = new JsonFactory();
    JsonGenerator jGenerator = jfactory.createJsonGenerator(out, JsonEncoding.UTF8);
    ObjectMapper mapper = new ObjectMapper();
    jGenerator.writeStartArray(); // [

    for (Event event : list) {
        String e = mapper.writeValueAsString(event);
        jGenerator.writeRaw(usage);
        // here, big hassles to write a comma to separate json objects, when the last object in the list is reached, no comma 
    }

    jGenerator.writeEndArray(); // ]

    jGenerator.close();

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

I am looking for something like:

generator.write(out, list)  

this directly convert the list to json array format and then write it to outputstream "out".

even greedier:

generator.write(out, list1)

generator.write(out, list2)

this will just convert/add in the list1, list2 into a single json array. then write it to "out"

解决方案

This is overly complicated, Jackson handles lists via its writer methods just as well as it handles regular objects. This should work just fine for you, assuming I have not misunderstood your question:

public void writeListToJsonArray() throws IOException {  
    final List<Event> list = new ArrayList<Event>(2);
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

    final ByteArrayOutputStream out = new ByteArrayOutputStream();
    final ObjectMapper mapper = new ObjectMapper();

    mapper.writeValue(out, list);

    final byte[] data = out.toByteArray();
    System.out.println(new String(data));
}

这篇关于Jackson - 将 Java 列表写入 json 数组的最佳方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆