登录
首页 >  Golang >  Go问答

如何不使用 Go 将空结构编组为 JSON?

来源:Golang技术栈

时间:2023-03-02 21:43:54 410浏览 收藏

哈喽!今天心血来潮给大家带来了《如何不使用 Go 将空结构编组为 JSON?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我有一个这样的结构:

type Result struct {
    Data       MyStruct  `json:"data,omitempty"`
    Status     string    `json:"status,omitempty"`
    Reason     string    `json:"reason,omitempty"`
}

但即使 MyStruct 的实例完全为空(意味着所有值都是默认值),它也被序列化为:

"data":{}

我知道encoding/json文档指定“空”字段是:

false,0,任何 nil 指针或接口值,以及任何长度为零的数组、切片、映射或字符串

但不考虑具有所有空/默认值的结构。它的所有字段也都标记有omitempty,但这没有效果。

如何让 JSON 包 封送我的空结构字段?

正确答案

正如文档所说,“任何 nil 指针”。-- 使结构成为指针。指针具有明显的“空”值:nil.

修复 - 使用结构 指针 字段定义类型:

type Result struct {
    Data       *MyStruct `json:"data,omitempty"`
    Status     string    `json:"status,omitempty"`
    Reason     string    `json:"reason,omitempty"`
}

然后是这样的值:

result := Result{}

将编组为:

{}

说明:注意*MyStruct我们的类型定义中的 。JSON 序列化不关心它是否是一个指针——这是一个运行时细节。因此,将结构字段变为指针仅对编译和运行时产生影响)。

请注意,如果您确实将字段类型从 更改MyStruct*MyStruct,您将需要指向结构值的指针来填充它,如下所示:

Data: &MyStruct{ /* values */ }

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何不使用 Go 将空结构编组为 JSON?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表