Rumah  >  Artikel  >  Java  >  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
Barbara Streisandasal
2024-11-19 17:36:03255semak imbas

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

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

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

Konfigurasi Gson:

Buat tika Gson dengan GsonBuilder, mendaftar adat deserializer:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Content.class, new MyDeserializer())
    .create();

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

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

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!

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