Rumah > Java > javaTutorial > Bagaimana untuk Mengekstrak Objek JSON Bersarang daripada Respons API menggunakan Gson dan Retrofit?

Bagaimana untuk Mengekstrak Objek JSON Bersarang daripada Respons API menggunakan Gson dan Retrofit?

Patricia Arquette
Lepaskan: 2024-11-19 04:26:02
asal
678 orang telah melayarinya

How to Extract Nested JSON Objects from API Responses using Gson and Retrofit?

Mengekstrak Objek JSON Bersarang Menggunakan Gson dan Retrofit

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.

Pernyataan Masalah

Pertimbangkan respons API dengan struktur berikut:

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

Anda mempunyai POJO dengan medan status dan sebab, tetapi data yang anda perlukan berada dalam objek kandungan bersarang.

Penyelesaian

Untuk mengekstrak kandungan bersarang, anda akan membuat deserializer tersuai yang membalut deserializer POJO sebenar. Begini caranya:

  1. Buat POJO Kandungan: Tentukan POJO untuk mewakili data kandungan bersarang.
  2. Laksanakan Deserializer: Buat deserializer yang mengekstrak medan kandungan:
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);
  }
}
Salin selepas log masuk
  1. Daftar Deserializer: Konfigurasikan Gson dengan deserializer tersuai anda:
Gson gson = new GsonBuilder()
  .registerTypeAdapter(Content.class, new MyDeserializer())
  .create();
Salin selepas log masuk
  1. Gunakan Retrofit dengan Penukar Tersuai: Buat contoh Retrofit menggunakan Gson yang diubah suai:
Retrofit retrofit = new Retrofit.Builder()
  .baseUrl(url)
  .addConverterFactory(GsonConverterFactory.create(gson))
  .build();
Salin selepas log masuk

Sekarang, anda boleh menyahsiri respons dan akses API anda kandungan bersarang secara langsung sebagai objek Kandungan menggunakan Retrofit.

Penyahserialisasi Generik untuk Pelbagai Jenis

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);
  }
}
Salin selepas log masuk

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!

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