golang tidak boleh menghuraikan json

WBOY
Lepaskan: 2023-05-15 11:22:07
asal
2168 orang telah melayarinya

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.

  1. Tidak dapat menghuraikan objek JSON kosong

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

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>
Salin selepas log masuk
  1. Tidak dapat menghuraikan nilai nol dalam JSON

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

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>
Salin selepas log masuk
  1. Tidak boleh menghuraikan tatasusunan kosong dalam JSON

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

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: &[]
Salin selepas log masuk
  1. Tidak dapat menghuraikan objek bersarang dalam JSON

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

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"
Salin selepas log masuk
  1. Tidak boleh menghuraikan aksara bukan ASCII dalam JSON

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

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

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!

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