Rumah >Java >javaTutorial >Bagaimana untuk Mengekstrak Objek JSON Bersarang daripada Retrofit Responses menggunakan Deserializers GSON Tersuai?

Bagaimana untuk Mengekstrak Objek JSON Bersarang daripada Retrofit Responses menggunakan Deserializers GSON Tersuai?

Patricia Arquette
Patricia Arquetteasal
2024-11-23 06:40:25858semak imbas

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

Mengekstrak Objek JSON Bersarang dengan GSON dalam Retrofit

Apabila menggunakan API yang bertindak balas dengan objek JSON yang mengandungi data bersarang, ia boleh menjadi mencabar untuk mengekstrak dan mengendalikan data yang berkaitan secara langsung. Ini benar terutamanya apabila data yang dikehendaki dikuburkan dalam medan "kandungan" perantara.

Untuk mengatasi halangan ini, GSON menyediakan mekanisme untuk mencipta penyahserialisasi tersuai, yang boleh digunakan untuk mengekstrak medan tertentu daripada respons JSON .

Mencipta Deserializer Tersuai

Untuk mencipta deserializer tersuai, tentukan kelas baharu yang melaksanakan antara muka JsonDeserializer, seperti yang ditunjukkan di bawah:

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);
    }
}

Deserializer Generik untuk Jenis Kandungan Berbeza

Jika anda mempunyai jenis mesej yang berbeza tetapi semua berkongsi medan "kandungan", anda boleh mencipta medan generik 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);
    }
}

Mendaftarkan Deserializer dalam Retrofit

Setelah deserializer dibuat, daftarkannya dengan GsonConverterFactory apabila membuat contoh Retrofit:

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

Contoh Penggunaan:

Dengan adanya penyahserialisasi tersuai, anda kini boleh menyahsiri respons JSON terus ke dalam POJO yang dikehendaki:

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

Dengan menggunakan penyahserialisasi tersuai, anda mendapat fleksibiliti untuk menyesuaikan proses penghuraian JSON mengikut keperluan khusus anda, membolehkan anda mengakses dan memanipulasi data bersarang dengan mudah dalam JSON jawapan.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Objek JSON Bersarang daripada Retrofit Responses menggunakan Deserializers GSON Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn