解析带有尾随逗号的JSON数组和映射元素时出现运行时错误

解析带有尾随逗号的JSON数组和映射元素时出现运行时错误,json,go,gofmt,Json,Go,Gofmt,Go的主要主题专家之一Dave Cheney写道:“当使用复合文字初始化变量时,Go要求复合文字的每一行都以逗号结尾,甚至是声明的最后一行。这是 然而,当我试图将这条漂亮的规则应用于JSON文本时,解析器似乎不同意这一理念。在下面的代码中,删除逗号是有效的。是否有解决方案,以便在我的差异中添加元素时只看到一行更改 package main import ( "fmt" "encoding/json" ) type jsonobject struct { Objects

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:

{ "objects": 
    [ 
        {"name": "foo"},
]}
这是一种Go语法,如果枚举在第()行未关闭,则需要使用逗号,例如:

即使您可以“说服”一个特定的JSON解析器默默地接受它,其他有效的JSON解析器也会正确地报告错误。不要这样做。

没有。不允许尾随逗号

这不是有效的JSON:

{ "objects": 
    [ 
        {"name": "foo"},
]}
这是一种Go语法,如果枚举在第()行未关闭,则需要使用逗号,例如:

即使您可以“说服”一个特定的JSON解析器默默地接受它,其他有效的JSON解析器也会正确地报告错误。不要这样做