首页 > 后端开发 > Golang > 如何区分 Go 中的 Null 和缺失 JSON 字段?

如何区分 Go 中的 Null 和缺失 JSON 字段?

Barbara Streisand
发布: 2024-11-30 19:35:12
原创
411 人浏览过

How Can I Differentiate Between Null and Missing JSON Fields in Go?

区分 Go 中的 Null 和不存在的 JSON 字段

将 JSON 解组到 Go 结构体时,区分 JSON 字段可能具有挑战性显式设置为 null 的以及 JSON 负载中根本不存在的。这种区别在许多场景中至关重要,因为它会影响数据的语义及其解释。

Go 1.18 解决方案

从 Go 1.18 开始,一个通用的可选结构体可以用来解决这个问题:

type Optional[T any] struct {
    Defined bool
    Value   *T
}
登录后复制

这个结构实现了 UnmarshalJSON接口,允许它区分已定义和未定义的值。解组 JSON 负载时,无论该值是 null 还是有效值,Optional 结构的定义字段都将设置为 true。

示例用法

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[bool]   `json:"field2"`
    Field3 Optional[int32]  `json:"field3"`
}
登录后复制

解组 JSON 有效负载后,定义的字段可用于确定 JSON 中是否存在特定字段或不是。

Go 1.18 之前的解决方案

对于 1.18 之前的 Go 版本,可以创建自定义类型来实现相同的结果。

type OptionalString struct {
    Defined bool
    Value   *string
}
登录后复制

与Go 1.18中的Optional结构类似,该类型实现了UnmarshalJSON接口相应地设置已定义字段。

用法示例

type Payload struct {
    SomeField1 string         `json:"somefield1"`
    SomeField2 OptionalString `json:"somefield2"`
}
登录后复制

通过使用此自定义类型,可以检查已定义字段以区分空字段和不存在字段.

以上是如何区分 Go 中的 Null 和缺失 JSON 字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板