Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilakah Adakah `json.Unmarshal` Mengembalikan Ralat dalam Pergi?

Bilakah Adakah `json.Unmarshal` Mengembalikan Ralat dalam Pergi?

Patricia Arquette
Patricia Arquetteasal
2024-11-10 11:00:03400semak imbas

When Does `json.Unmarshal` Return an Error in Go?

Bilakah JSON Unmarshal to Structure Mengembalikan Ralat dalam Go?

Dalam Go, fungsi json.Unmarshal cuba menyahkod berformat JSON bait ke dalam struktur data sasaran. Walaupun ia berjaya menghuraikan dan mengisi medan dengan nama yang sepadan dalam JSON sumber, ia tidak menimbulkan ralat apabila nilai tidak sepadan dengan struktur sasaran.

Walau bagaimanapun, json.Unmarshal akan menghadapi ralat dalam situasi berikut:

Ralat Sintaks:

Jika Input JSON secara sintaksis tidak betul, json.Unmarshal akan mengembalikan ralat. Contohnya, jika tanda petikan yang diperlukan tiada, penyahkod akan gagal menghuraikan JSON.

type A struct {
    Name string `json:"name"`
}
data := []byte(`{"name":what?}`)
err := json.Unmarshal(data, &a)
fmt.Println(err)  // prints character 'w' looking for beginning of value

Nilai JSON Tidak Boleh Diwakili Mengikut Jenis Sasaran:

Jika jenis nilai JSON tidak boleh ditukar kepada jenis medan yang sepadan dalam struktur sasaran, json.Unmarshal akan mengembalikan ralat. Contohnya, jika boolean JSON cuba diberikan kepada medan rentetan:

data := []byte(`{"name":false}`)
type B struct {
  Name string `json:"name"`
}
var b B
err = json.Unmarshal(data, &b)
fmt.Println(err) // prints cannot unmarshal bool into Go value of type string

Butiran Pelaksanaan Lain:

Selain daripada ralat penukaran sintaksis dan jenis, json.Unmarshal juga boleh mengembalikan ralat dalam situasi luar biasa lain. Rujuk dokumentasi Go untuk senarai yang lebih lengkap.

Atas ialah kandungan terperinci Bilakah Adakah `json.Unmarshal` Mengembalikan Ralat dalam Pergi?. 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