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中文网其他相关文章!