【问题标题】:Go omitempty bool field- not showing false typeGo omitempty bool 字段 - 不显示错误类型
【发布时间】:2022-08-04 10:19:48
【问题描述】:

我有一个结构

type Settings struct {
    Status             bool `json:\"status,omitempty\"`
    AvailableStatus        bool `json:\"available_status,omitempty\"`
}

我正在使用这个结构来保存数据并在我的 GOAPis 中显示数据

例如,如果对于我的保存数据,我的 json 正文是这样的

{\"settings\":{\"status\":true,
\"available_status\":false}}

保存后我使用 Get-API 获取数据数据我得到这样的

\"settings\": {
        \"status\": true
    }

仅显示真实数据我需要显示两个数据并且还需要设置 omitempty(省略空以保存,在创建 json 并使用 json 我正在检查验证之后)

我怎样才能做到这一点?

为了保存数据,所有字段都不是必需的。 我也许可以在我的 api 正文中提供如下所示的 json。

{\"settings\":{\"status\":true,
    \"available_status\":false}}

或者

{\"settings\":{\"status\":true}}

我也想这样做。我为每个模型创建了 json 并且验证正在检查 json .. 如果我没有添加 omitempty 字段,它将显示错误 available_status 是必需的。

或任何其他将可用状态设置为必填字段的方法..

  • 不太清楚你为什么需要omitempty...请你澄清一下吗?
  • 我还认为您可以在此处删除 omit empty。
  • omitempty 记录在忽略false 值,这就是它正在做的事情。
  • @blackgreen我更新了我的问题..我需要保存并在同一个结构中获取作品
  • 如果你只做 json.Unmarshal,无论有没有字段,你都不会得到错误。 go.dev/play/p/1QacQ2NvYBA看来验证的实现有问题,无法达到你的目的,所以建议写验证码,问个问题。

标签: go


【解决方案1】:

“omitempty”仅在 value 等于所选类型的 zerovalue 时省略。如果您想从 struct 创建自定义 json,您可以从 struct 制作地图并使用 json.Marshal 或其他库,如 https://github.com/tidwall/sjson

【讨论】:

  • 我会检查这个
【解决方案2】:

使用指针

type Settings struct {
    Status             *bool `json:"status,omitempty"`
    AvailableStatus    *bool `json:"available_status,omitempty"`
}

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2012-09-10
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多