GSON Melontar "Dijangka BEGIN_OBJECT tetapi telah BEGIN_ARRAY"?
Apabila cuba menghuraikan rentetan JSON ke dalam senarai objek menggunakan GSON, anda mungkin menghadapi ralat "Dijangka BEGIN_OBJECT tetapi BEGIN_ARRAY". Ini berlaku apabila data JSON yang disediakan ialah tatasusunan, sementara anda menjangkakan objek.
Untuk menyelesaikan isu ini, anda harus melaraskan kod penghuraian anda untuk menampung struktur tatasusunan. Berikut ialah pecahan masalah dan penyelesaian yang betul:
Masalah:
Data JSON yang disediakan ialah tatasusunan objek dan bukannya satu objek. Kod anda, bagaimanapun, cuba menghuraikannya sebagai objek tunggal, mengakibatkan ralat.
Penyelesaian:
Untuk membetulkannya, anda perlu menentukan bahawa JSON mewakili susunan objek. Ini boleh dilakukan dengan mengubah suai kod anda untuk menghuraikan JSON ke dalam tatasusunan kelas objek anda:
ChannelSearchEnum[] enums = gson.fromJson(jstring, ChannelSearchEnum[].class);
Dengan cara ini, GSON akan menghuraikan JSON dengan betul sebagai tatasusunan objek ChannelSearchEnum.
Penyelesaian Alternatif:
Untuk lebih fleksibiliti, anda boleh menggunakan kelas TypeToken untuk tentukan jenis berparameter untuk koleksi yang ingin anda huraikan, seperti yang dilihat di bawah:
Type collectionType = new TypeToken<Collection<ChannelSearchEnum>>() {}.getType(); Collection<ChannelSearchEnum> enums = gson.fromJson(jstring, collectionType);
Pendekatan ini membolehkan anda menghuraikan JSON ke dalam koleksi objek ChannelSearchEnum, yang boleh menjadi Senarai, Set atau sebarang jenis koleksi lain.
Atas ialah kandungan terperinci Mengapakah GSON Membuang 'Dijangka BEGIN_OBJECT tetapi BEGIN_ARRAY' Semasa Menghuraikan JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!