Retrofit を使用して GSON でネストされた JSON オブジェクトを取得する
問題の概要:
JSON 応答が構造化された API例:
{ 'status': 'OK', 'reason': 'Everything was fine', 'content': { < some data here > }
目的の POJO データが「content」フィールド内にネストされている場合、Retrofit はデフォルトで JSON 応答全体を「status」フィールドと「reason」フィールドを含む POJO に逆シリアル化しますが、実際のフィールドはそうではありません対象のデータ。
カスタマイズデシリアライゼーション:
ネストされたコンテンツ フィールドを自動的に抽出するには、Gson:
Content POJO:
Define を使用してカスタム デシリアライザーを作成できます。ネストされたデータを表す POJO クラス。 as:
class Content { public int foo; public String bar; }
デシリアライザー:
JsonDeserializer を実装する
class MyDeserializer implements JsonDeserializer<Content> { @Override public Content deserialize(...) { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, Content.class); } }
Gson Configuration:
GsonBuilder を使用して Gson インスタンスを作成します。カスタムの登録デシリアライザー:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer()) .create();
複数のタイプ用の拡張デシリアライザー:
「コンテンツ」フィールドを持つ複数のタイプのメッセージがある場合は、次のようにデシリアライザーを一般化できます。
class MyDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(...) { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, type); } }
コンテンツごとにこのデシリアライザーのインスタンスを登録します
Retrofit Integration:
カスタマイズされた Gson インスタンスを Retrofit ビルダーに渡します:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
この設定により、Retrofit は自動的に実行されます。 「コンテンツ」フィールドを抽出して適切な POJO に解析するため、手動でフィールドを抽出する必要がなくなります。
以上がRetrofit と Gson を使用してネストされた JSON データを効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。