Go 著名專家Dave Cheney 強調了以以下形式結束複合文字的每一行的重要性一個逗號。然而,這個規則似乎與 Go 中的 JSON 解析相矛盾。
考慮以下程式碼:
<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>
在此程式碼中,從 JSON 陣列中刪除尾隨逗號使其工作。但是,有沒有辦法避免這種不一致呢?
不幸的是,沒有。 JSON 規範禁止尾隨逗號。將尾隨逗號添加到在另一行繼續的開啟的枚舉是有效的 Go 語法。但是,這不適用於 JSON。
以下是無效 JSON 結構的範例:
{ "objects": [ {"name": "foo"}, ]}
即使可以說服特定 JSON 解析器接受此格式,其他有效的 JSON 解析器會正確地報告錯誤。因此,建議遵守 JSON 規範並避免尾隨逗號。
以上是為什麼我的 Go 程式碼在解析帶有逗號的 JSON 陣列時會出現執行時間錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!