json go

JSON golang booleano omitempty



(1)

Tengo problemas para escribir una biblioteca de golang para una api. El aspecto json de los booleanos está causando problemas.

Digamos que el valor predeterminado de un valor booleano es verdadero para una llamada a la API.

Si lo hago

SomeValue bool `json:some_value,omitempty`

y no establezco el valor a través de la biblioteca, el valor se establecerá en verdadero. Si configuro el valor en falso en la biblioteca, omitempty dice que un valor falso es un valor vacío, por lo que el valor se mantendrá verdadero durante la llamada a la API.

Saquemos la omitempty y hagámoslo así.

SomeValue bool `json:some_value`

Ahora tengo el problema opuesto, puedo establecer el valor en falso, pero si no lo hago, el valor será falso aunque espero que sea cierto.

Edición: ¿Cómo mantengo el comportamiento de no tener que establecer el valor en verdadero mientras que también puedo establecer el valor en falso?


Usar punteros

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

Salida:

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