java - 将多个列表重新编写回单个JsonArray的最佳方法

时间:2012-11-22 15:50:53

标签: java json jackson

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

2 个答案:

答案 0 :(得分:1)

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

  1. 创建WriterBasedJsonGenerator(或您使用的任何JsonGenerator)的自定义实现,稍微修改一下行为:
  2.     public MyJsonGenerator extends WriterBasedJsonGenerator {
            @Override
            public void writeStartArray () {// do nothing
            }
    
            @Override
            public void writeEndArray () {// do nothing
            }
        }
    
    1. 在写第一个ArrayList之前,我会做

      generator.writeRaw ('[');
    2. 在下一个列表之前

      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)