ネストされた JSON オブジェクトを取得するための Retrofit GSON コンバーターのカスタマイズ
ネストされた JSON 構造内に目的のデータを埋め込む API を使用する場合、Retrofit で GSON を利用する挑戦的になる可能性があります。この質問では、ネストされた API 応答から特定のコンテンツ オブジェクトを抽出するソリューションを検討します。
問題の JSON 応答は、必要なデータが「コンテンツ」フィールド内に配置されるパターンに従います。目標は、外側のレイヤーを無視して、このコンテンツを直接取得する GSON コンバータを作成することです。
解決策: カスタム デシリアライザーの作成
この解決策は、カスタム デシリアライザーの作成を中心に展開します。埋め込みオブジェクトの抽出に焦点を当てたデシリアライザー。デシリアライザーは「デシリアライズ」メソッドをオーバーライドし、次の手順を実行します。
デシリアライザーの登録と Gson の作成
カスタム デシリアライザーを Retrofit で使用できるようにするには、GsonBuilder を使用して登録する必要があります。ネストされた JSON で発生するタイプごとに個別のインスタンスを登録します。結果の Gson インスタンスは、Retrofit クライアントで使用できます。
実装例
class MyDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, type); } } Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer<Content>()) .registerTypeAdapter(DiffContent.class, new MyDeserializer<DiffContent>()) .create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
このアプローチを採用することで、Retrofit クライアントは必要なデータをシームレスに逆シリアル化できます。オブジェクトが API 応答内で深くネストされている場合でも。
以上がRetrofit の GSON コンバータをカスタマイズして、ネストされた JSON オブジェクトを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。