2

我的问题是将多个列表转换回单个 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"}
]
4

2 回答 2

1

我不知道Jackson,但看着API我会这样做:

  1. 创建WriterBasedJsonGenerator(或JsonGenerator您使用的任何)的自定义实现,以稍微修改行为:
    公共 MyJsonGenerator 扩展 WriterBasedJsonGenerator {
        @覆盖
        public void writeStartArray() {//什么都不做
        }

        @覆盖
        public void writeEndArray() {//什么都不做
        }
    }
  1. 比在写第一个之前ArrayList我会做

    生成器.writeRaw('[');

在下一个列表之前

generator.writeRaw (',');

在最后一个列表之后

generator.writeRaw (']');
于 2012-11-22T16:16:25.877 回答
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)
于 2012-11-27T10:52:19.683 回答