Gson と Retrofit を使用して API 応答からネストされた JSON オブジェクトを抽出する方法

Patricia Arquette
リリース: 2024-11-19 04:26:02
オリジナル
629 人が閲覧しました

How to Extract Nested JSON Objects from API Responses using Gson and Retrofit?

Gson と Retrofit を使用したネストされた JSON オブジェクトの抽出

最新のアプリケーションでは、ネストされた JSON 構造を含む API 応答がよく見られます。これは、ネストされた階層内の特定のデータ フィールドを操作する場合に問題が発生する可能性があります。このガイドでは、カスタム Gson デシリアライザーを作成し、Retrofit を使用してネストされた JSON オブジェクトから目的のコンテンツを抽出する方法を説明します。

問題ステートメント

次の構造の API 応答を考えてみましょう:

{
  'status': 'OK',
  'reason': 'Everything was fine',
  'content': {
    < real data here >
  }
}
ログイン後にコピー

ステータスフィールドと理由フィールドを含む POJO がありますが、必要なデータはネストされたコンテンツ内にありますobject.

解決策

ネストされたコンテンツを抽出するには、実際の POJO デシリアライザーをラップするカスタム デシリアライザーを作成します。その仕組みは次のとおりです:

  1. コンテンツ POJO を作成します: ネストされたコンテンツ データを表す POJO を定義します。
  2. デシリアライザーを実装します: コンテンツを抽出するデシリアライザーを作成するフィールド:
class MyDeserializer implements JsonDeserializer<Content> {
  @Override
  public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) {
    // Get the "content" element from the parsed JSON
    JsonElement content = je.getAsJsonObject().get("content");

    // Deserialize it using a new Gson instance to avoid recursion
    return new Gson().fromJson(content, Content.class);
  }
}
ログイン後にコピー
  1. デシリアライザーの登録: カスタム デシリアライザーを使用して Gson を構成します:
Gson gson = new GsonBuilder()
  .registerTypeAdapter(Content.class, new MyDeserializer())
  .create();
ログイン後にコピー
  1. カスタム コンバーターでレトロフィットを使用する:変更された Gson を使用した Retrofit インスタンス:
Retrofit retrofit = new Retrofit.Builder()
  .baseUrl(url)
  .addConverterFactory(GsonConverterFactory.create(gson))
  .build();
ログイン後にコピー

これで、Retrofit を使用して API 応答を逆シリアル化し、ネストされたコンテンツに Content オブジェクトとして直接アクセスできるようになります。

複数の型の汎用デシリアライザー

「コンテンツ」フィールドを共有する複数のタイプのメッセージがある場合は、次のように汎用デシリアライザーを作成できます。

class MyDeserializer<T> implements JsonDeserializer<T> {
  @Override
  public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) {
    // Get the "content" element from the parsed JSON
    JsonElement content = je.getAsJsonObject().get("content");

    // Deserialize it using a new Gson instance to prevent recursion
    return new Gson().fromJson(content, type);
  }
}
ログイン後にコピー

コンテンツ タイプごとにこのデシリアライザーを登録します。 Retrofit は、API 応答のタイプに基づいて適切なデシリアライザーを自動的に使用します。

以上がGson と Retrofit を使用して API 応答からネストされた JSON オブジェクトを抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート