解析带有尾随逗号的JSON数组和映射元素时出现运行时错误
Go的主要主题专家之一Dave Cheney写道:“当使用复合文字初始化变量时,Go要求复合文字的每一行都以逗号结尾,甚至是声明的最后一行。这是 然而,当我试图将这条漂亮的规则应用于JSON文本时,解析器似乎不同意这一理念。在下面的代码中,删除逗号是有效的。是否有解决方案,以便在我的差异中添加元素时只看到一行更改解析带有尾随逗号的JSON数组和映射元素时出现运行时错误,json,go,gofmt,Json,Go,Gofmt,Go的主要主题专家之一Dave Cheney写道:“当使用复合文字初始化变量时,Go要求复合文字的每一行都以逗号结尾,甚至是声明的最后一行。这是 然而,当我试图将这条漂亮的规则应用于JSON文本时,解析器似乎不同意这一理念。在下面的代码中,删除逗号是有效的。是否有解决方案,以便在我的差异中添加元素时只看到一行更改 package main import ( "fmt" "encoding/json" ) type jsonobject struct { Objects
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:
{ "objects":
[
{"name": "foo"},
]}
这是一种Go语法,如果枚举在第()行未关闭,则需要使用逗号,例如:
即使您可以“说服”一个特定的JSON解析器默默地接受它,其他有效的JSON解析器也会正确地报告错误。不要这样做。没有。不允许尾随逗号
这不是有效的JSON:
{ "objects":
[
{"name": "foo"},
]}
这是一种Go语法,如果枚举在第()行未关闭,则需要使用逗号,例如:
即使您可以“说服”一个特定的JSON解析器默默地接受它,其他有效的JSON解析器也会正确地报告错误。不要这样做