Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Membetulkan Ralat \'Dijangkakan BEGIN_OBJECT tetapi NAME\' Semasa Menghuraikan JSON Bersarang dengan GSON dalam Android?

DDD
Lepaskan: 2024-10-28 10:18:02
asal
903 orang telah melayarinya

How to Fix the

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

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

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

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

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:

  • Pastikan anda kelas model (GsonParse dan Words) mempunyai getter dan setter untuk semua medan JSON.
  • Jika anda membaca JSON daripada fail dalam folder aset, pastikan anda menggunakan InputStreamReader dan bukannya JsonReader.
  • Untuk menyokong aksara UTF-8, tukar rentetan JSON kepada UTF-8 sebelum menghuraikannya.

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!