Go 领域的主要主题专家之一 Dave Cheney 写道:“当使用复合文字初始化变量时,Go 要求复合文字的每一行都以逗号结尾,甚至是声明的最后一行。这就是结果分号规则."
然而,当我尝试将这个美丽的规则应用于 JSON 文本时,解析器似乎并不同意这种理念。在下面的代码中,删除逗号是有效的。是否有解决方案,以便当我在差异中添加元素时只能看到一行更改?
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
}
那没有。这JSON规范不允许尾随逗号。
这不是有效的 JSON:
{ "objects":
[
{"name": "foo"},
]}
这是 Go 语法,如果枚举未在行上关闭,则需要使用逗号 (更多关于这个), e.g.:
// Slice literal:
s := []int {
1,
2,
}
// Function call:
fmt.Println(
"Slice:",
s,
)
即使您可以“说服”一个特定的 JSON 解析器默默地吞下它,其他有效的 JSON 解析器也会正确地报告错误。不要这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)