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