mbfrahry mbfrahry - 10 months ago 81
JSON Question

JSON golang boolean omitempty

I'm having issues with writing a golang library for an api. The json aspect of booleans is causing issues.

Let's say the default value of a boolean is true for an api call.

If I do

SomeValue bool `json:some_value,omitempty`

and I don't set the value through the library, the value will be set to true. If I set the value to false in the library, omitempty says that a false value is an empty value so the value will stay true through the api call.

Let's take out the omitempty and have it look like this

SomeValue bool `json:some_value`

Now I have the opposite issue, I can set the value to false but if I don't set the value then the value will be false even though I expect it to be true.

Edit: How do I maintain the behavior of not having to set the value to true while also being able to set the value to false?

g-v g-v

Use pointers

package main

import (

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})