ホームページ > Java > &#&チュートリアル > カスタム GSON デシリアライザーを使用して、Retrofit 応答からネストされた JSON オブジェクトを抽出する方法

カスタム GSON デシリアライザーを使用して、Retrofit 応答からネストされた JSON オブジェクトを抽出する方法

Patricia Arquette
リリース: 2024-11-23 06:40:25
オリジナル
868 人が閲覧しました

How to Extract Nested JSON Objects from Retrofit Responses using Custom GSON Deserializers?

Retrofit で GSON を使用してネストされた JSON オブジェクトを抽出する

ネストされたデータを含む JSON オブジェクトで応答する API を使用する場合、次のことが困難になる可能性があります。関連するデータを直接抽出して操作します。これは、目的のデータが中間の「コンテンツ」フィールド内に埋め込まれている場合に特に当てはまります。

このハードルを克服するために、GSON は、応答 JSON から特定のフィールドを抽出するために使用できるカスタム デシリアライザーを作成するメカニズムを提供します。 .

カスタム デシリアライザーの作成

カスタム デシリアライザーを作成するにはdeserializer では、以下に示すように、JsonDeserializer インターフェイスを実装する新しいクラスを定義します。

class MyDeserializer implements JsonDeserializer<Content> {
    @Override
    public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException {
        // Get the "content" element from the parsed JSON
        JsonElement content = je.getAsJsonObject().get("content");
        
        // Deserialize it. Use a new instance of Gson to avoid infinite recursion
        return new Gson().fromJson(content, Content.class);
    }
}
ログイン後にコピー

Generic Deserializer for Different Content Types

メッセージの種類が異なる場合は、すべてが「コンテンツ」フィールドを共有しているため、汎用的なフィールドを作成できます。 deserializer:

class MyDeserializer<T> implements JsonDeserializer<T> {
    @Override
    public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException {
        // Get the "content" element from the parsed JSON
        JsonElement content = je.getAsJsonObject().get("content");
        
        // Deserialize it. Use a new instance of Gson to avoid infinite recursion
        return new Gson().fromJson(content, type);
    }
}
ログイン後にコピー

Retrofit でのデシリアライザーの登録

デシリアライザーを作成したら、Retrofit インスタンスの作成時に GsonConverterFactory に登録します:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
ログイン後にコピー

例使用法:

カスタム デシリアライザーを配置すると、JSON 応答を目的の POJO に直接デシリアライズできるようになります。

Content c = gson.fromJson(myJson, Content.class);
ログイン後にコピー

カスタム デシリアライザーを利用することで、次のような柔軟性が得られます。 JSON 解析プロセスを特定のニーズに合わせて調整することで、JSON 応答内のネストされたデータに簡単にアクセスして操作できるようになります。

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

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