Golang ialah bahasa pengaturcaraan yang sangat praktikal Matlamat reka bentuk utamanya adalah untuk meningkatkan kebolehbacaan, kebolehselenggaraan dan kebolehpercayaan program. Apabila menulis program Golang, kita selalunya perlu menggunakan JSON sebagai format standard untuk penyirian dan komunikasi data. Walau bagaimanapun, apabila menggunakan Golang untuk menghuraikan JSON, anda kadangkala menghadapi beberapa masalah, seperti tidak dapat menghuraikan JSON. Artikel ini akan memperkenalkan beberapa ralat penghuraian JSON biasa dan menyediakan beberapa penyelesaian.
Dalam Golang, kita boleh menggunakan fungsi json.Unmarsha1l untuk menghuraikan data JSON ke dalam struktur atau kepingan dalam bahasa Go. Walau bagaimanapun, jika kita cuba menghuraikan objek JSON kosong, bahasa Go akan melaporkan ralat:
json: cannot unmarshal object into Go struct field .Field of type string
Ini kerana objek JSON kosong tidak mempunyai pasangan nilai kunci, jadi penghurai tidak boleh menghuraikannya a Go struktur. Penyelesaiannya boleh menggunakan penunjuk untuk menandakan medan struktur sebagai pilihan, supaya objek JSON kosong boleh disokong. Contohnya:
type MyStruct struct { Field *string } data := []byte(`{}`) var s MyStruct err := json.Unmarshal(data, &s) if err != nil { log.Fatal(err) } fmt.Println(s.Field) // output: <nil>
Dalam JSON, null mewakili nilai kosong dan jenis yang sepadan dalam Golang ialah sifar. Jika kami cuba menghuraikan nilai nol dalam JSON, bahasa Go akan melaporkan ralat:
json: cannot unmarshal null into Go struct field .Field of type string
Ini kerana nilai null dalam JSON tidak boleh ditukar kepada jenis bukan penuding dalam bahasa Go. Penyelesaiannya adalah dengan menggunakan jenis penuding untuk mengisytiharkan medan struktur:
type MyStruct struct { Field *string } data := []byte(`{"Field": null}`) var s MyStruct err := json.Unmarshal(data, &s) if err != nil { log.Fatal(err) } fmt.Println(s.Field) // output: <nil>
Dalam JSON, tatasusunan kosong mewakili tatasusunan tanpa unsur , jenis yang sepadan dalam Golang ialah []. Jika kita cuba menghuraikan tatasusunan kosong dalam JSON, bahasa Go akan melaporkan ralat:
json: cannot unmarshal array into Go struct field .Field of type []string
Ini kerana tatasusunan kosong tidak boleh ditukar kepada kepingan jenis bukan penuding. Penyelesaiannya adalah dengan menggunakan jenis penuding untuk mengisytiharkan hirisan:
type MyStruct struct { Field *[]string } data := []byte(`{"Field": []}`) var s MyStruct err := json.Unmarshal(data, &s) if err != nil { log.Fatal(err) } fmt.Println(s.Field) // output: &[]
Dalam JSON, kita boleh menyarangkan berbilang objek . Walau bagaimanapun, apabila menghuraikan objek bersarang, Golang akan melaporkan ralat:
json: cannot unmarshal object into Go struct field .Field of type string
Ini kerana Golang tidak boleh menukar objek bersarang kepada medan jenis bukan struktur. Penyelesaiannya ialah menggunakan jenis struct untuk menghuraikan objek bersarang:
type Field struct { Name string } type MyStruct struct { Field Field } data := []byte(`{"Field": {"Name": "value"}}`) var s MyStruct err := json.Unmarshal(data, &s) if err != nil { log.Fatal(err) } fmt.Println(s.Field.Name) // output: "value"
Dalam JSON, kita boleh menggunakan set Aksara UTF-8 untuk mengekod sebarang aksara, termasuk aksara ASCII dan bukan ASCII. Walau bagaimanapun, apabila menghuraikan aksara bukan ASCII dalam JSON, Golang akan melaporkan ralat:
json: invalid character 'ò' looking for beginning of value
Ini kerana bahasa Go menggunakan pengekodan UTF-8 secara lalai dan aksara dalam data JSON mungkin bukan UTF- 8 dikodkan. Penyelesaiannya adalah dengan menggunakan format pengekodan lain untuk penghuraian, seperti pengekodan perduaan asal JSON:
data := []byte{0x22, 0xC3, 0xB2, 0x22} var s string err := json.Unmarshal(data, &s) if err != nil { log.Fatal(err) } fmt.Println(s) // output: "ò"
Semasa menulis program Golang, kami sering perlu menggunakan format data JSON, tetapi kadangkala kami menghadapi beberapa masalah semasa menghuraikan JSON . Artikel ini menerangkan beberapa ralat penghuraian JSON yang biasa dan menyediakan beberapa penyelesaian. Semoga petua ini dapat membantu anda mengelakkan beberapa kesilapan biasa semasa menulis program Golang.
Atas ialah kandungan terperinci golang tidak boleh menghuraikan json. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!