Possiedo una struttura che vorrei maresciallo in JSON in modo diverso a seconda del contesto.JSON marshalling/unmarshalling stessa struttura in un diverso formato JSON in go?
Ad esempio, a volte voglio schierare in questo modo:
type MyStruct struct {
Nickname string `json:"nickname"`
EmailAddress string `json:"email_address"`
PhoneNumber string `json:"-"`
MailingAddress string `json:"-"`
}
E a volte voglio schierare in questo modo:
type MyStruct struct {
Nickname string `json:"nickname"`
EmailAddress string `json:"email_address"`
PhoneNumber string `json:"phone_number"`
MailingAddress string `json:"mailing_address"`
}
C'è un modo semplice per fare questo senza:
- Creazione di 2 strutture separate.
- Scrittura di un marshaller personalizzato.
- Rimuovere temporaneamente i valori stringa per PhoneNumber e MailingAddress (con un'omitempty sul tag), effettuare il marshalling e quindi aggiungerli nuovamente.
Se solo ci fosse un modo per:
- Specificare 2 set di tag e dire al gestore di marshalling quali utilizzare.
- Cambia dinamicamente i tag in fase di esecuzione.
Questo è stato molto più semplice di quanto immaginassi. Ho finito per utilizzare una combinazione di questo approccio e quello descritto qui: http://attilaolah.eu/2014/10/10/json-and-struct-composition-in-go/ –
Ecco alcuni link per riferimento: The Marshaler tipo http://golang.org/pkg/encoding/json/#Marshaler. Articolo del blog: http://blog.golang.org/json-and-go –
Lo stesso principio si applica a unmarshalling: http://golang.org/pkg/encoding/json/#Unmarshaler –