我的问题是将多个列表重新转换回单个JsonArray的最佳方法是什么。这些列表即将发布,所以我不想或者我不能将所有列表(list1 - listn)合并到一个大列表中,然后使用Jackson将合并列表写入JsonArray。
转换
ArrayList<Event> list1 = new ArrayList<Event>();
list1.add(new Event("a1","a2"));
list1.add(new Event("b1","b2"));
ArrayList<Event> list2 = new ArrayList<Event>();
list2.add(new Event("c1","c2"));
list2.add(new Event("d1","d2"));
......
......listn
到一个jsonArray:
[
{"field1":"a1", "field2":"a2"},
{"field1":"b1", "field2":"b2"},
{"field1":"c1", "field2":"c2"},
{"field1":"d1", "field2":"d2"},
......
{"field1":"n1", "field2":"n2"}
]
答案 0 :(得分:1)
我不知道Jackson
但是看API
我会这样做:
WriterBasedJsonGenerator
(或您使用的任何JsonGenerator
)的自定义实现,稍微修改一下行为:public MyJsonGenerator extends WriterBasedJsonGenerator { @Override public void writeStartArray () {// do nothing } @Override public void writeEndArray () {// do nothing } }
在写第一个ArrayList
之前,我会做
generator.writeRaw ('[');
在下一个列表之前
generator.writeRaw (',');
在最后一个清单之后
generator.writeRaw (']');
答案 1 :(得分:0)
在一天结束时,我发现杰克逊没有这样的方法允许你直接将两个列表写回JsonArray。您可以使用自己的实现writeStartArray()writeEndArray()实现JsonGenerator,或者更简单,您可以定义startArray和endArray,并自己构造jsonArray
private static final String JSON_ARRAY_START = "[" + LINE_BREAK;
private static final String JSON_ARRAY_COMMA = "," + LINE_BREAK;
private static final String JSON_ARRAY_END = LINE_BREAK+ "]";
因此代码大致如下:
write(JSON_ARRAY_START)
foreach list1
use objectMapper write every Event object
write(JSON_ARRAY_COMMA)
foreach list2
use objectMapper write every Event object
if it's not the last element in the list, write(JSON_ARRAY_COMMA)
write(JSON_ARRAY_END)