У меня есть вложенная структура из JSON. Эта структура имеет много необязательных свойств, и чтобы успешно пройти ее, мне нужно проверить, существуют ли свойства. Когда свойства определяются как структуры указателей, это становится очень неудобным: мне приходится создавать экземпляр пустого типа и сравнивать его с помощью refle.DeepEqual .
Есть ли более краткий способ сделать это?
Пример:
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func unmarshalNested(data []byte) (nested, error) {
var r nested
err := json.Unmarshal(data, &r)
return r, err
}
type nested struct {
Alfa alfa `json:"alfa"`
}
type alfa struct {
Bravo *bravo `json:"bravo,omitempty"`
}
type bravo struct {
Charlie string `json:"charlie"`
}
func main() {
json := `
{
"alfa": {
"bravo": {
"charlie": "foobar"
}
}
}
`
/*
json := "{"alfa": {}}
*/
n := nested{}
n, _ = unmarshalNested([]byte(json))
fmt.Println("-- Alfa --")
fmt.Printf(" %+v\n", n)
fmt.Println("-- *Bravo --")
var b *bravo = nil
if reflect.DeepEqual(b, n.Alfa.Bravo) {
fmt.Println(" nil")
} else {
fmt.Printf(" %+v\n", n.Alfa.Bravo)
}
}