Rumah >pembangunan bahagian belakang >Golang >Mengapa JSON Membongkar Array menjadi Go Struct Menyebabkan Panik?

Mengapa JSON Membongkar Array menjadi Go Struct Menyebabkan Panik?

Linda Hamilton
Linda Hamiltonasal
2024-12-16 10:49:10780semak imbas

Why Does JSON Unmarshaling an Array into a Go Struct Cause a Panic?

Panik: JSON Unmarshal Array into Go Struct

Apabila cuba menghuraikan data daripada JSON API, anda mengalami ralat: "panic: json: tidak boleh menyahmarshal tatasusunan ke dalam nilai Go jenis utama.Struktur." Isu timbul apabila menyahmarshaling tatasusunan JSON ke dalam struct Go.

Kod Anda:

type Structure struct {
        stuff []interface{}
}

func main() {
        // ...

        decoded := &Structure{}
        err = json.Unmarshal(body, decoded)
}

Hasil Jangkaan:

Anda menjangkakan kod itu akan mengembalikan senarai antara muka objek.

Hasil Sebenar:

Sebaliknya, anda menerima ralat yang menunjukkan bahawa tatasusunan JSON tidak boleh dinyahmarshalkan ke dalam nilai Structure Go.

Penyelesaian:

Untuk menyelesaikan isu ini, pertimbangkan dua pendekatan:

  1. Unmarshal to a Slice:

    Ganti baris:

    decoded := &Structure{}

    dengan:

    var data []interface{}

    Ini akan menyahmarshal tatasusunan JSON kepada sekeping antara muka.

  2. Unmarshal to Slice of Structs:

    Buat struct khusus untuk struktur data tindak balas. Contohnya:

    type Tick struct {
      ID string
      Name string
      Symbol string
      Rank string
      Price_USD string
    }

    Kemudian, hapuskan sepotong struct ini:

    var data []Tick
    err = json.Unmarshal(body, &data)

Atas ialah kandungan terperinci Mengapa JSON Membongkar Array menjadi Go Struct Menyebabkan Panik?. 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