1

これをシリアル化する必要があります:

List<Event>

Event クラスは次のとおりです。

public class Event {
  public int id;
  public String foo;
  public String bar;
}

次の形式の JSON に変換します。

{
  "123":{"foo":"...","bar":"..."},
  "345":{"foo":"...","bar":"..."}
}

Event から「id」プロパティを取り出して Map を格納することでうまくいきますが、重複する ID をサポートする必要があります。

Jackson がそれをキーとして扱い、オブジェクトの残りの部分を関連付けられた値として扱うようにするために、「id」プロパティに付けることができる注釈はありますか?

4

2 に答える 2

0

を使用できるためIdentityHashMap、同じ値を含む文字列の異なるインスタンスを使用して、次の結果を得ることができます。

{"1":{"foo":"foo1","bar":"bar"},"2":{"foo":"foo2.1","bar":"bar"},"3":{"foo":"foo2","bar":"baz"},"2":{"foo":"foo2","bar":"baz"}}

これを実行できること:

import java.io.IOException;
import java.util.Arrays;
import java.util.IdentityHashMap;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTest {

    public static void main(final String[] args) throws JsonGenerationException, JsonMappingException, IOException {
        ObjectMapper om = new ObjectMapper();

        IdentityHashMap<String, Event> ihm = new IdentityHashMap<String, Event>();

        List<Event> list = Arrays.asList( //
                new Event(1, "foo1", "bar"), //
                new Event(2, "foo2", "baz"), //
                new Event(2, "foo2.1", "bar"), //
                new Event(3, "foo2", "baz") //
                );

        for (Event e : list) {
            ihm.put(String.valueOf(e.id), e);
        }

        System.out.println(om.writeValueAsString(ihm));
    }

    @JsonIgnoreProperties({ "id" })
    public static class Event {
        public int id;
        public String foo;
        public String bar;

        public Event(final int id, final String foo, final String bar) {
            super();
            this.id = id;
            this.foo = foo;
            this.bar = bar;
        }

    }

}
于 2012-06-25T21:15:14.377 に答える
0

ID の現在の構造をキーとして使用すると、JSON 仕様で ID が重複する可能性があるかどうかわかりません。おそらく、ID を持つ配列があれば。目的の JSON 出力を再評価する必要があると思います。

于 2012-06-25T20:28:20.760 に答える