首页 > 后端开发 > Golang > 正文

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

DDD
发布: 2024-10-28 20:17:31
原创
299 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!