java—将多个列表背靠背写入单个JsonArray的最佳方法

java—将多个列表背靠背写入单个JsonArray的最佳方法,java,json,jackson,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"));

我的问题是,将多个列表背靠背转换为单个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 

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

  • 创建一个自定义的
    WriterBasedJsonGenerator
    (或您使用的任何
    JsonGenerator
    )实现,稍微修改一下行为:
  • 在下一个列表之前

    generator.writeRaw (',');
    
    在最后一张名单之后呢

    generator.writeRaw (']');
    

    在一天结束时,我发现在Jackson中没有这样的方式允许你直接将两个列表背靠背地写进JsonArray。您可以使用自己的实现WriteStarray()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)
    

    我试图理解这个问题:你有多个列表,在哪里?在课堂上?假设您成功地将所有列表(1,2..n)转换为Gson/Jackson字符串。现在您想将其转换回数组列表,是吗?让我在这里提供更多的背景信息,我以批处理模式查询底层数据库,所以让我们假设一次10条记录。他们以10项记录的列表形式回来。然后我们将我的API作为返回流(outputstream)处理单个jsonArray。所有这些都是因为结果集可能非常大,我们不希望任何地方出现内存不足问题。
    generator.writeRaw (']');
    
    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)