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!