Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengekori Koma dalam JSON: Mengapakah Sintaks Tersurat Komposit Go Bercanggah dengan Penghuraian JSON?

Mengekori Koma dalam JSON: Mengapakah Sintaks Tersurat Komposit Go Bercanggah dengan Penghuraian JSON?

DDD
DDDasal
2024-10-28 20:17:31289semak imbas

  Trailing Commas in JSON: Why Does Go's Composite Literal Syntax Conflict with JSON Parsing?

Ralat Sintaks Koma Mengekor dalam Penghuraian JSON dengan Go

Dave Cheney, pakar terkenal di Go, menekankan keperluan untuk mengekori koma dalam pengisytiharan literal komposit. Walau bagaimanapun, peraturan ini nampaknya bercanggah dengan penghuraian JSON.

Pertimbangkan kod berikut:

<code class="go">// package, imports omitted for brevity

type jsonobject struct {
    Objects []ObjectType `json:"objects"`
}

type ObjectType struct {
    Name string `json:"name"`
}

func main() {
    bytes := []byte(`{ "objects": 
        [ 
            {"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
        ]}`)
    jsontype := &jsonobject{}
    json.Unmarshal(bytes, &jsontype)
    fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}</code>

Mengalih keluar koma mengekor menyelesaikan ralat masa jalan. Adakah Go menyokong pembetulan untuk ketidakkonsistenan ini?

Penyelesaian

Malangnya, tiada penyelesaian. Spesifikasi JSON tidak membenarkan koma di belakang. Walaupun sintaks Go mewajibkan mengekori koma dalam literal komposit, keperluan ini tidak digunakan untuk penghuraian JSON.

Dalam erti kata lain, JSON berikut tidak sah:

<code class="json">{ "objects": 
    [ 
        {"name": "foo"},
]}</code>

Walaupun berpotensi untuk sesuatu yang khusus Penghurai JSON untuk mengabaikan koma di belakang, amalan ini harus dielakkan kerana ia boleh menyebabkan ralat apabila menggunakan penghurai JSON yang lain yang sah.

Atas ialah kandungan terperinci Mengekori Koma dalam JSON: Mengapakah Sintaks Tersurat Komposit Go Bercanggah dengan Penghuraian JSON?. 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