首页 >后端开发 >Golang >JSON 中的尾随逗号:为什么 Go 的复合文字语法与 JSON 解析冲突?

JSON 中的尾随逗号:为什么 Go 的复合文字语法与 JSON 解析冲突?

DDD
DDD原创
2024-10-28 20:17:31406浏览

  Trailing Commas in JSON: Why Does Go's Composite Literal Syntax Conflict with JSON Parsing?

Go 解析 JSON 时出现尾随逗号语法错误

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn