Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengekstrak Data JSON Bersarang Dengan Cekap Menggunakan Retrofit dan Gson?

Bagaimanakah Saya Boleh Mengekstrak Data JSON Bersarang Dengan Cekap Menggunakan Retrofit dan Gson?

Barbara Streisand
Lepaskan: 2024-11-19 17:36:03
asal
319 orang telah melayarinya

How Can I Efficiently Extract Nested JSON Data Using Retrofit and Gson?

Dapatkan Objek JSON Bersarang dengan GSON Menggunakan Retrofit

Gambaran Keseluruhan Masalah:

Apabila menggunakan API dengan respons JSON berstruktur seperti:

{
    'status': 'OK',
    'reason': 'Everything was fine',
    'content': {
         < some data here >
}
Salin selepas log masuk

di mana data POJO yang dikehendaki diletakkan dalam medan "kandungan", Retrofit secara lalai menyahsiri keseluruhan respons JSON menjadi POJO dengan medan "status" dan "sebab", tetapi bukan data sebenar yang diminati.

Menyesuaikan Deserialisasi:

Untuk mengekstrak medan kandungan bersarang secara automatik, anda boleh membuat tersuai deserializer menggunakan Gson:

POJO Kandungan:

Tentukan kelas POJO yang mewakili data bersarang, seperti:

class Content {
    public int foo;
    public String bar;
}
Salin selepas log masuk

Deserializer :

Melaksanakan a JsonDeserializer yang mengekstrak elemen "kandungan" daripada respons JSON dan menyahsirikannya ke dalam POJO Kandungan:

class MyDeserializer implements JsonDeserializer<Content> {
    @Override
    public Content deserialize(...) {
        JsonElement content = je.getAsJsonObject().get("content");
        return new Gson().fromJson(content, Content.class);
    }
}
Salin selepas log masuk

Konfigurasi Gson:

Buat tika Gson dengan GsonBuilder, mendaftar adat deserializer:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Content.class, new MyDeserializer())
    .create();
Salin selepas log masuk

Deserializer Dipertingkatkan untuk Pelbagai Jenis:

Jika anda mempunyai berbilang jenis mesej dengan medan "kandungan", anda boleh membuat generalisasi deserializer seperti berikut:

class MyDeserializer<T> implements JsonDeserializer<T> {
    @Override
    public T deserialize(...) {
        JsonElement content = je.getAsJsonObject().get("content");
        return new Gson().fromJson(content, type);
    }
}
Salin selepas log masuk

Daftarkan contoh penyahserialisasi ini untuk setiap kandungan anda jenis.

Penyepaduan Retrofit:

Lepaskan tika Gson tersuai kepada pembina Retrofit:

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

Dengan persediaan ini, Retrofit kini akan secara automatik ekstrak medan "kandungan" dan huraikannya ke dalam POJO yang sesuai, menghapuskan keperluan untuk medan manual pengekstrakan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekstrak Data JSON Bersarang Dengan Cekap Menggunakan Retrofit dan Gson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan