首頁  >  文章  >  後端開發  >  JSON 中的尾隨逗號:為什麼 Go 的複合文字語法與 JSON 解析衝突?

JSON 中的尾隨逗號:為什麼 Go 的複合文字語法與 JSON 解析衝突?

DDD
DDD原創
2024-10-28 20:17:31289瀏覽

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

Go 解析 JSON 時出現尾隨逗號語法錯誤

Go 著名專家 Dave Cheney 強調了複合文字聲明中尾隨逗號的要求。但是,此規則似乎與 JSON 解析衝突。

考慮以下程式碼:

<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>

刪除尾隨逗號可以解決執行時間錯誤。 Go 是否支援修復這種不一致問題?

解決方案

不幸的是,沒有解決方案。 JSON 規範不允許尾隨逗號。雖然 Go 語法要求在複合文字中使用尾隨逗號,但此要求不適用於 JSON 解析。

換句話說,以下JSON 無效:

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

儘管有可能出現特定的情況JSON 解析器忽略尾隨逗號,應避免這種做法,因為在使用其他有效的JSON解析器時可能會導致錯誤。

以上是JSON 中的尾隨逗號:為什麼 Go 的複合文字語法與 JSON 解析衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn