Jacksonで2つ以上の型を持つ配列をパースするには

投稿者: Anonymous

JavaのJsonパーサJacksonを使って配列をパースするとき普通であれば。以下のようにレスポンスのモデルを作成し、readValuesを用いてパースできます。

ObjectMapper mapper = new ObjectMapper();
try{
  ResponseClass response = mapper.readValue(response.toString(), ResponseClass.class);
}(SomeException e){
  }

--------------

//Model class
class ResponseClass{
  public List<SomeType> items;
}

--------------

//Json response
{
  [
     {
        type:"TypeA",
        name:"hoge"
     },
  ........

しかし例えばこの配列の要素の型が複数ある場合はどうすればいいのでしょうか。例えば取得するJsonオブジェクトが以下のようなものの場合。

{
  [
    {
      type:"typeA",
      name:"hoge"
    },
    {
      type:"typeB",
      mail:"[email protected]"
    }
   .......
  ]
{

この場合はObjectモデルのListのジェネリクスとフィールド名はどのようにすればいいのでしょう。

解決

JsonArrayに変換したあとで、for文を使ってその要素を調べて特定の要素がある場合で場合分けしてからJsonObjectにパースしました。
他にもいい方法があれば教えていただけると幸いです。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *