【问题标题】: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,但您提出了解组的问题。

标签: go unmarshalling


【解决方案1】:

你有点困惑,fmt.Printf("%+v", animals) 打印 Go 结构,它总是会打印出所有指定的字段。

但是,如果将其转换回 json,它将省略 nil 字段。

查看http://play.golang.org/p/Q2M5oab2UX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多