首页  >  文章  >  后端开发  >  为什么我的 Go 代码在解析带有逗号的 JSON 数组时会出现运行时错误?

为什么我的 Go 代码在解析带有逗号的 JSON 数组时会出现运行时错误?

DDD
DDD原创
2024-10-28 08:13:29886浏览

Why Does My Go Code Panic with a Runtime Error When Parsing a JSON Array with a Trailing Comma?

Go 中使用尾随逗号解析 JSON 数组时出现运行时错误

Go 著名专家 Dave Cheney 强调了以以下形式结束复合文字的每一行的重要性一个逗号。然而,这个规则似乎与 Go 中的 JSON 解析相矛盾。

考虑以下代码:

<code class="go">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
}</code>

在此代码中,从 JSON 数组中删除尾随逗号使其工作。但是,有没有办法避免这种不一致?

解决方案

不幸的是,没有。 JSON 规范禁止尾随逗号。将尾随逗号添加到在另一行继续的打开的枚举是有效的 Go 语法。但是,这不适用于 JSON。

以下是无效 JSON 结构的示例:

{ "objects": 
    [ 
        {"name": "foo"},
]}

即使可以说服特定 JSON 解析器接受此格式,其他有效的 JSON 解析器会正确地报告错误。因此,建议遵守 JSON 规范并避免尾随逗号。

以上是为什么我的 Go 代码在解析带有逗号的 JSON 数组时会出现运行时错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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