我有一个这样的结构:
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
。
修复-使用结构 指针 字段定义类型:
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 */ }
问题内容: 我是mongodb-go-driver的新手。但是我被困住了。 查看m [id]的内容时,它没有内容-全部为null。 我的地图是这样的:m map [string] Language 语言定义如下: 我究竟做错了什么? 我正在使用此示例进行学习:https : //github.com/mongodb/mongo-go- driver/blob/master/examples/doc
我有一个这样的结构: 但是,即使MyStruct的实例完全为空(也就是说,所有值都是默认值),它也被序列化为: 我知道编码/json文档指定“空”字段是: false、0、任何nil指针或接口值,以及任何长度为零的数组、切片、映射或字符串 但不考虑所有空/默认值的结构。它的所有字段也用标记,但这没有效果。 如何让JSON包不封送我的空结构字段?
我确实有这个要求 如果我没有在json请求正文中发送,则解组会在不返回错误的情况下分配“”,我想知道是否有类似的情况 因此,如果字段不存在或为空,则解组返回错误。 提前谢谢
问题内容: 我一直在研究使用结构作为golang映射中的键。此结构中的一个字段也应该是一个映射,这似乎与此处提供的文档背道而驰,该文档只说那些具有可与之进行比较的字段且可以在用作映射中键的结构的字段中的结构。但是,我继续尝试以下方法: 输出为: 这似乎违反了文档,因为用作键的结构中的字段是映射。我似乎出了什么问题? 问题答案: 在您的示例中,映射键是指向结构的指针,而不是结构本身。即使指针指向的项
问题内容: 我正在尝试使用该包将Go结构转换为JSON,但我得到的只是。我敢肯定这是完全显而易见的,但我看不到。 然后,当我尝试运行它时,我得到以下信息: 问题答案: 您需要导出的字段,以便在包装可以看到它。将字段重命名为。 输出:
问题内容: 我正在尝试通过创建JSON文件并将其解析为结构来配置Go程序: config.json文件: 该程序可以编译并运行,没有任何错误,但是print语句输出: (错误和两个空字符串) 我也尝试过,但结果相同。 如何以填充结构值的方式解析JSON? 问题答案: 您没有导出struct元素。它们都以小写字母开头。 将结构元素的首字母大写以将其导出。JSON编码器/解码器不会使用未导出的结构元素