Home > Java > javaTutorial > How to Extract Nested JSON Objects from Retrofit Responses using Custom GSON Deserializers?

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

Patricia Arquette
Release: 2024-11-23 06:40:25
Original
846 people have browsed it

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

Extracting Nested JSON Objects with GSON in Retrofit

When consuming an API that responds with JSON objects containing nested data, it can become challenging to extract and operate on the relevant data directly. This is particularly true when the desired data is buried within an intermediary "content" field.

To overcome this hurdle, GSON provides a mechanism for creating custom deserializers, which can be used to extract specific fields from the response JSON.

Creating a Custom Deserializer

To create a custom deserializer, define a new class implementing the JsonDeserializer interface, as shown below:

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);
    }
}
Copy after login

Generic Deserializer for Different Content Types

If you have different types of messages but all share a "content" field, you can create a generic 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);
    }
}
Copy after login

Registering the Deserializer in Retrofit

Once the deserializer is created, register it with the GsonConverterFactory when creating a Retrofit instance:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
Copy after login

Example Usage:

With the custom deserializer in place, you can now deserialize the JSON response directly into the desired POJO:

Content c = gson.fromJson(myJson, Content.class);
Copy after login

By utilizing custom deserializers, you gain the flexibility to tailor the JSON parsing process to your specific needs, allowing you to easily access and manipulate nested data within the JSON responses.

The above is the detailed content of How to Extract Nested JSON Objects from Retrofit Responses using Custom GSON Deserializers?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template