Rumah  >  Artikel  >  Java  >  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?

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?

Barbara Streisand
Barbara Streisandasal
2024-11-01 14:07:291071semak imbas

Why am I getting the

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!

Kenyataan:
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