Dalam aplikasi moden, adalah perkara biasa untuk menemui respons API dengan struktur JSON bersarang. Ini boleh menimbulkan cabaran apabila anda ingin bekerja dengan medan data tertentu dalam hierarki bersarang. Panduan ini akan menunjukkan cara membuat penyahserialisasi Gson tersuai untuk mengekstrak kandungan yang diingini daripada objek JSON bersarang menggunakan Retrofit.
Pertimbangkan respons API dengan struktur berikut:
{ 'status': 'OK', 'reason': 'Everything was fine', 'content': { < real data here > } }
Anda mempunyai POJO dengan medan status dan sebab, tetapi data yang anda perlukan berada dalam objek kandungan bersarang.
Untuk mengekstrak kandungan bersarang, anda akan membuat deserializer tersuai yang membalut deserializer POJO sebenar. Begini caranya:
class MyDeserializer implements JsonDeserializer<Content> { @Override public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) { // Get the "content" element from the parsed JSON JsonElement content = je.getAsJsonObject().get("content"); // Deserialize it using a new Gson instance to avoid recursion return new Gson().fromJson(content, Content.class); } }
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer()) .create();
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
Sekarang, anda boleh menyahsiri respons dan akses API anda kandungan bersarang secara langsung sebagai objek Kandungan menggunakan Retrofit.
Jika anda mempunyai berbilang jenis mesej yang berkongsi medan "kandungan", anda boleh mencipta penyahserialisasi generik seperti berikut:
class MyDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) { // Get the "content" element from the parsed JSON JsonElement content = je.getAsJsonObject().get("content"); // Deserialize it using a new Gson instance to prevent recursion return new Gson().fromJson(content, type); } }
Daftarkan penyahserialisasi ini untuk setiap jenis kandungan anda. Retrofit secara automatik akan menggunakan penyahserialisasi yang sesuai berdasarkan jenis tindak balas API.
Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Objek JSON Bersarang daripada Respons API menggunakan Gson dan Retrofit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!