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