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中文網其他相關文章!