JSON Parsing dengan GSON dalam Android
Bagaimanakah anda boleh memudahkan JSON parsing dengan GSON dalam Android? Mari kita terokai isu biasa apabila menggunakan GSON dan mendalami penyelesaian langkah demi langkah.
Pernyataan Masalah:
Apabila menggunakan GSON untuk menghuraikan rentetan JSON, anda mungkin menghadapi ralat "Dijangka BEGIN_OBJECT tetapi ialah NAME". Ini biasanya berlaku apabila anda cuba menghuraikan objek JSON yang bersarang dalam tatasusunan.
Contoh JSON:
Pertimbangkan data JSON berikut:
<code class="json">{ "count": "12", "colbreak": 1, "name": "unary rels", "score": "9090", "Words": [ { "count": 6, "word": "prp_għaċ-", "name": "prp_għaċ-", "score": 9.1, "Words": "kol", "seek": 2231297 } ], "seek": 0 }</code>
Kod:
Kod anda menggunakan GSON untuk menghurai:
<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) { // ... while (reader.hasNext()) { T cse = (T) gson.fromJson(reader, t.getClass()); lcs.add(cse); } // ... }</code>
Ralat:
Menjalankan ini kod boleh mengakibatkan ralat seperti:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73
Penyelesaian:
Untuk menyelesaikan ralat ini, anda perlu mengubah suai cara anda membaca nilai JSON. Daripada menggelung seluruh rentetan JSON, anda harus melangkau ke objek tertentu yang anda mahu hurai dan kemudian menyahkodnya.
Kaedah Disemak:
Ini adalah versi yang diperbetulkan daripada kaedah JsonParse:
<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) { // ... while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("Words")) { reader.beginArray(); while (reader.hasNext()) { T cse = (T) gson.fromJson(reader, t.getClass()); lcs.add(cse); } reader.endArray(); } else { reader.skipValue(); } } // ... }</code>
Penjelasan:
Dalam kaedah yang disemak ini, kod menyemak sama ada nama JSON semasa ialah "Words" dan jika ya, bermula membaca tatasusunan. Ia kemudian menggelung melalui setiap objek dalam tatasusunan, menghuraikannya menggunakan GSON dan menambahkannya ke senarai. Untuk mana-mana nama JSON yang lain, seperti "kiraan" atau "skor," kaedah tersebut hanya melangkaui nama tersebut.
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \'Dijangkakan BEGIN_OBJECT tetapi NAME\' Semasa Menghuraikan JSON Bersarang dengan GSON dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!