Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Kod Go Saya Panik dengan Ralat Masa Jalan Apabila Menghuraikan Tatasusunan JSON dengan Tanda Koma?

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

DDD
DDDasal
2024-10-28 08:13:29893semak imbas

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>

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"},
]}

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!

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