JSON golang boolean omitempty
У меня возникли проблемы с написанием библиотеки golang для api. Json-аспект булевых элементов вызывает проблемы.
Предположим, что значение по умолчанию для логического значения истинно для вызова api.
Если я делаю
SomeValue bool `json:some_value,omitempty`
и я не устанавливаю значение через библиотеку, значение будет установлено в true. Если я устанавливаю значение false в библиотеке, omitempty говорит, что ложное значение является пустым значением, поэтому значение будет оставаться верным через вызов api.
Возьмем omitempty и будем выглядеть так:
SomeValue bool `json:some_value`
Теперь у меня есть противоположная проблема, я могу установить значение в false, но если я не установлю значение, значение будет ложным, хотя я ожидаю, что оно будет истинным.
Изменить: как мне поддерживать поведение, когда вам не нужно устанавливать значение true, а также можно установить значение в false?
Ответы
Ответ 1
Использовать указатели
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}