Mengapa Kod Go Saya Panik dengan Ralat Masa Jalan Apabila Menghuraikan Tatasusunan JSON dengan Tanda Koma?

DDD
Lepaskan: 2024-10-28 08:13:29
asal
895 orang telah melayarinya

Why Does My Go Code Panic with a Runtime Error When Parsing a JSON Array with a Trailing Comma?

Ralat Masa Jalan dalam JSON Array Parsing dengan Trailing Comma in Go

Dave Cheney, pakar terkenal di Go, menekankan kepentingan menamatkan setiap baris literal komposit dengan koma. Walau bagaimanapun, peraturan ini nampaknya bercanggah dengan penghuraian JSON dalam Go.

Pertimbangkan kod berikut:

<code class="go">package main

import (
    "fmt"
    "encoding/json"
)

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

Dalam kod ini, mengalih keluar koma mengekor daripada tatasusunan JSON menjadikannya berfungsi. Namun, adakah tidak ada cara untuk mengelakkan ketidakkonsistenan ini?

Resolusi

Malangnya, tidak. Spesifikasi JSON melarang koma di belakang. Ia adalah sintaks Go yang sah untuk menambah koma mengekor pada penghitungan terbuka yang diteruskan pada baris lain. Walau bagaimanapun, ini tidak boleh digunakan untuk JSON.

Berikut ialah contoh struktur JSON yang tidak sah:

{ "objects": 
    [ 
        {"name": "foo"},
]}
Salin selepas log masuk

Walaupun mungkin untuk memujuk penghurai JSON tertentu untuk menerima format ini, yang lain penghurai JSON yang sah akan melaporkan ralat dengan betul. Oleh itu, adalah disyorkan untuk mematuhi spesifikasi JSON dan mengelakkan koma di belakang.

Atas ialah kandungan terperinci Mengapa Kod Go Saya Panik dengan Ralat Masa Jalan Apabila Menghuraikan Tatasusunan JSON dengan Tanda Koma?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!