Chcę użyć "encoding/json"
pakietu do zorganizowania struktury zadeklarowanej w jednym z zaimportowanych pakietów mojej aplikacji.
Na przykład.:
type T struct {
Foo int
}
Ponieważ jest importowany, wszystkie dostępne (eksportowane) pola w strukturze zaczynają się od dużej litery. Ale chciałbym mieć nazwy kluczy małymi literami:
out, err := json.Marshal(&T{Foo: 42})
spowoduje
{"Foo": 42}
ale chcę dostać
{"foo": 42}
Czy można w jakiś łatwy sposób obejść problem?
json
go
marshalling
ANisus
źródło
źródło
Odpowiedzi:
Zapoznaj się z dokumentacją dotyczącą kodowania / json.Marshal . Omawia użycie znaczników pola struct w celu określenia sposobu formatowania wygenerowanego pliku JSON.
Na przykład:
Spowoduje to wygenerowanie JSON w następujący sposób:
źródło
reflect
pakietu.json:"some_tag"
zamiastjson: "some_tag"
. Przez chwilę mnie to ugryzło.Możesz stworzyć własną strukturę z kluczami, które chcesz wyeksportować, i nadać im odpowiednie tagi json dla nazw małych liter. Następnie możesz skopiować żądaną strukturę do swojej przed zakodowaniem jej jako JSON. Lub jeśli nie chcesz zawracać sobie głowy tworzeniem lokalnej struktury, prawdopodobnie możesz zrobić a
map[string]interface{}
i zakodować to.źródło
map[string]interface{}
zadziała, o ile nie skończę z zagnieżdżonymi obiektami / strukturami