Cara Menghuraikan Data JSON Menggunakan GSON dalam Android: Penyelesaian Ralat
Apabila menghuraikan data JSON menggunakan GSON dalam Android, anda mungkin menghadapi ralat : "java.lang.IllegalStateException: Dijangkakan BEGIN_OBJECT tetapi NAME pada baris 1 lajur 73." Ralat ini menunjukkan isu sintaks dalam data JSON, khususnya, pendakap pembukaan yang tiada.
Penyelesaian Kemungkinan
Untuk menyelesaikan isu ini, pastikan data JSON anda betul diformatkan dan mengandungi kedua-dua pendakap kerinting pembuka dan penutup. Contohnya:
<code class="json">{ "count": "12", "colbreak": 1, ... "seek": 0 }</code>
Punca Biasa
Satu punca biasa ralat ini ialah menerima data JSON yang disimpan dalam fail atau dimuat turun daripada pelayan sebagai rentetan . Dalam kes sedemikian, rentetan mungkin tidak dikodkan atau didahulukan dengan betul, yang boleh membawa kepada ralat penghuraian.
Pengubahsuaian Kelas Tersuai
Dalam kod anda, anda menggunakan Java refleksi untuk mencipta kelas tersuai, GsonParse, untuk mewakili struktur data JSON. Pendekatan ini biasanya tidak disyorkan. Sebaliknya, buat kaedah pengambil dan penetap yang jelas untuk setiap medan dalam GsonParse. Selain itu, anotasi nama kelas dan medan dengan @SerializedName untuk memadankan nama sifat JSON.
Berikut ialah contoh:
<code class="java">public class GsonParse { @SerializedName("count") private String count; @SerializedName("colbreak") private String colbreak; @SerializedName("name") private String name; @SerializedName("score") private String score; @SerializedName("Words") private List<Words> mWords = new ArrayList<>(); @SerializedName("seek") private String seek; // Add getters and setters here... }</code>
Pengekodan UTF-8
Pastikan data JSON anda dikodkan dengan betul dalam format UTF-8. Apabila menerima data JSON melalui HTTP, pelayan harus bertindak balas dengan pengepala Jenis Kandungan yang sesuai (cth., 'application/json; charset=utf-8').
Kaedah Penghuraian yang Diperbaiki
Berikut ialah versi kaedah penghuraian anda yang dipertingkatkan yang menggunakan Pembaca:
<code class="java">public static <T> ArrayList<T> JsonParse(T t, Reader reader) { ArrayList<T> lcs = new ArrayList<>(); try { Gson gson = new Gson(); JsonReader jsonReader = new JsonReader(reader); jsonReader.beginObject(); while (jsonReader.hasNext()) { T cse = (T) gson.fromJson(jsonReader, t.getClass()); lcs.add(cse); } jsonReader.endObject(); jsonReader.close(); } catch (UnsupportedEncodingException | IOException e) { e.printStackTrace(); } return (ArrayList<T>) lcs; }</code>
Penggunaan
Untuk menggunakan kaedah ini, buat Pembaca daripada anda sumber (cth., fail atau respons HTTP) dan hantarkannya kepada kaedah JsonParse:
<code class="java">InputStream ims = assetManager.open("file.txt"); Reader reader = new InputStreamReader(ims, "UTF-8"); ArrayList<GsonParse> gsonObjects = JsonParse(new GsonParse(), reader);</code>
Atas ialah kandungan terperinci Mengapa saya mendapat ralat \"java.lang.IllegalStateException: Dijangkakan BEGIN_OBJECT tetapi NAME pada baris 1 lajur 73\" semasa menghuraikan data JSON menggunakan GSON dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!