JSON golang boolean omitempty

mbf*_*hry 26 json go

我在为api编写golang库时遇到问题.布林的json方面正在引发问题.

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

如果我做

SomeValue bool `json:some_value,omitempty`
Run Code Online (Sandbox Code Playgroud)

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

让我们拿出omitempty,让它看起来像这样

SomeValue bool `json:some_value`
Run Code Online (Sandbox Code Playgroud)

现在我有相反的问题,我可以将值设置为false,但如果我没有设置值,那么即使我希望它是真的,该值也将为false.

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

gav*_*avv 36

使用指针

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))
}
Run Code Online (Sandbox Code Playgroud)

输出:

{}
{"some_value":true}
{"some_value":false}
Run Code Online (Sandbox Code Playgroud)