【问题标题】:JSON golang boolean omitemptyJSON golang 布尔省略
【发布时间】:2016-06-10 19:57:08
【问题描述】:

我在为 api 编写 golang 库时遇到问题。布尔值的 json 方面导致了问题。

假设对于 api 调用,布尔值的默认值为 true。

如果我这样做了

SomeValue bool `json:some_value,omitempty`

并且我没有通过库设置值,该值将设置为true。如果我在库中将该值设置为 false,则 omitempty 表示 false 值为空值,因此该值将通过 api 调用保持为 true。

让我们去掉省略号,让它看起来像这样

SomeValue bool `json:some_value`

现在我遇到了相反的问题,我可以将值设置为 false,但如果我不设置该值,那么即使我希望它为 true,该值也会为 false。

编辑:如何保持不必将值设置为 true 同时也能够将值设置为 false 的行为?

【问题讨论】:

  • 等等,有什么问题?
  • 当您需要区分未设置值和零值时,请使用指针。
  • 我添加了问题。让我知道这是否有意义@Jerrybibo
  • 做到了。谢谢@JimB

标签: json go


【解决方案1】:

Use pointers

package main

import (
    "encoding/json"
    "fmt"
)

type SomeStruct struct {
    SomeValue *bool `json:"some_value,omitempty"`
}

func main() {
    t := new(bool)
    f := new(bool)

    *t = true
    *f = false

    s1, _ := json.Marshal(SomeStruct{nil})
    s2, _ := json.Marshal(SomeStruct{t})
    s3, _ := json.Marshal(SomeStruct{f})

    fmt.Println(string(s1))
    fmt.Println(string(s2))
    fmt.Println(string(s3))
}

输出:

{}
{"some_value":true}
{"some_value":false}

【讨论】:

  • 如果我不想使用 some_value。如果我使用json:"true,omitempty" 代替它,它会起作用吗?
  • @IFTEKHARIASIF - go 的json 标记中的第一项是您将
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多