解组忽略空字段
Posted
技术标签:
【中文标题】解组忽略空字段【英文标题】:unmarshal ignore empty fields 【发布时间】:2014-09-27 13:21:07 【问题描述】:成功提交用户详细信息后,我从客户端获得了 JSON。
可以跳过 JSON 中的某些元素,因为它们没有更新。
在 Go 服务器端,我定义了一个等效结构。
服务器成功地将 JSON 字节编组到结构中。
type user struct
Id *int64 `json:",omitempty"`
Name *string `json:",omitempty"`
Age *int64 `json:",omitempty"`
但是对于没有从客户端接收到的字段,默认情况下 unmarshal 硬编码 nil 为字符串,空数组为字符串数组。
例如,如果我得到 json "Id" : 64, "Name" : "Ryan"
,
我不希望 unmarshal 将其转换为 "Id" : some hexadecimal, "Name" : some hexadecimal, "Age" : nil
。
为了简单起见,我希望它是"Id" : some hexadecimal, "Name" : some hexadecimal
我怎样才能完全忽略该字段并映射我得到的东西?
Goplayground 代码:http://play.golang.org/p/3dZq0nf68R
【问题讨论】:
我不明白这个问题。如果您在该字段中得到 nil,则表示 json 没有它的值,并且 unmarshall 会将其设置为该字段类型的默认“零”值。 如果 json 字段没有值,我不想要设置 nil 的功能。如果该字段不存在,我希望它完全忽略该字段,换句话说,json 仅包含具有值的字段。 我对 goLang 还是很陌生,只是想看看是否有这样的功能。我不明白这里有什么困惑。 @Pals:你终于得到答案了吗?您已标记答案的是 Marshal,但您提出了解组的问题。 【参考方案1】:你有点困惑,fmt.Printf("%+v", animals)
打印 Go 结构,它总是会打印出所有指定的字段。
但是,如果将其转换回 json,它将省略 nil 字段。
查看http://play.golang.org/p/Q2M5oab2UX
【讨论】:
以上是关于解组忽略空字段的主要内容,如果未能解决你的问题,请参考以下文章