首页  >  文章  >  后端开发  >  为什么在 Go 中将 JSON 解组到嵌入结构时我的“Num”字段被忽略?

为什么在 Go 中将 JSON 解组到嵌入结构时我的“Num”字段被忽略?

Susan Sarandon
Susan Sarandon原创
2024-11-04 15:03:42189浏览

Why is my `Num` field ignored when unmarshalling JSON to an embedded struct in Go?

在 Go 中将 JSON 解组为嵌入式结构

将 JSON 数据反序列化为嵌入式结构可能会给 Golang 带来挑战。以结构体为例:

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}</code>

使用 json.Unmarshal(data, &Outer{}) 时,仅对 Inner 字段进行解组,忽略 Num 字段。要理解为什么会发生这种情况,请务必注意 Inner 嵌入在 Outer 中。

在 JSON 解组期间,库调用 Outer 上的解组器,Outer 又调用 Inner 上的解组器。因此,Inner.UnmarshalJSON 函数接收整个 JSON 字符串,并单独为 Inner 处理该字符串。

要解决此问题,请将 Inner 设为 Outer 中的显式字段。这确保了在 JSON 解组期间,正确解组 Inner 字段,并根据 JSON 数据设置 Num 字段:

<code class="go">Outer struct {
    I Inner // Make Inner an explicit field
    Num int `json:"Num"`
}</code>

此修改可以将 JSON 数据正确解组到 Outer 结构中,包括内部字段和数字字段。

以上是为什么在 Go 中将 JSON 解组到嵌入结构时我的“Num”字段被忽略?的详细内容。更多信息请关注PHP中文网其他相关文章!

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