Gsonを使って配列型Json(JsonArray)をList型オブジェクトにパースする方法(ja)

はじめに

※!!この記事の内容は、時間の経過・Gsonのアップデートとともに最新ない可能性がありますことを、ご了承ください。!!

Json image

経緯

とあるAPIの戻り値(=JSON)の型が配列型になっていて、そこだけJavaでうまくパースできずにつまっていました。

形としては、予測していた型は下記のJSONオブジェクト型で、

{
  ...,
  ...,
}

実際に帰っていた型は下記のような配列型でした。

[
  {
    ...
  },
  {
    ...
  }
  ...
]

Feedly Cloud APIを叩いて帰ってきた上記のような配列型のJSONは、現在Gsonを使ってパースしています。

Gsonとは

Gsonとは、Google社製のJavaオブジェクトとJSONの相互変換を行うためのJavaライブラリーです。Java言語を使ったアプリケーションであれば、Androidアプリケーションなどを問わず、Webアプリケーションなどにも利用することができます。

google-gson - A Java library to convert JSON to Java objects and vice-versa - Google Project Hosting

Gson#fromJsonで配列型のJsonをList型オブジェクトにパースする

さて、本題に戻りますが、今回のようなケースでは、JsonArrayは、List のような型にパースしたいです。Gsonに用意されているfromJsonというメソッドを用いることで、Gsonを使って配列型のJson(JsonArray)をList型のオブジェクトにパースすることができます。

方法は簡単で、TypeクラスのgetType()メソッドでList型オブジェクトのTypeを取得します。 取得したTypeを、下記のfromJsonメソッドの第二引数に渡すだけです。

Type type = new TypeToken<List>(){}.getType();
List posts = (List) gson.fromJson(jsonOutput, listType);

オーバーロードされているためいくつも同じ名前のメソッドがありますが、今回利用したメソッドは下記のシグネチャのメソッドです。

public T fromJson(String json, Type typeOfT) throws JsonSyntaxException {
  if (json == null) {
    return null;
  }
  StringReader reader = new StringReader(json);
  T target = (T) fromJson(reader, typeOfT);
  return target;
}

さくっと記事な感じですが、以上。

参考にしたStackOverFlow