2

私の質問は、複数のリストを1つの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
    public MyJsonGenerator extends WriterBasedJsonGenerator {
        @オーバーライド
        public void writeStartArray(){//何もしません
        }

        @オーバーライド
        public void writeEndArray(){//何もしません
        }
    }
  1. 最初に書く前よりArrayList

    generator.writeRaw('[');

次のリストの前に

generator.writeRaw (',');

そして最後のリストの後

generator.writeRaw (']');
于 2012-11-22T16:16:25.877 に答える
0

結局のところ、Jacksonには、2つのリストを直接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 に答える