Why struct fields are showing empty?

This has come up so many times. The problem is that only exported fields can be marshaled/unmarshaled.

Export the struct fields by starting them with capital (upper-case) letters.

type Animal2 struct {
    Name string
    Spec string
    Id   uint32
}

Try it on the Go Playground.

Note that the JSON text contains the field names with lowercased text, but the json package is “clever” enough to match them. If they would be completely different, you could use struct tags to tell the json package how they are found (or how they should be marshaled) in the JSON text, e.g.:

type Animal2 struct {
    Name string `json:"json_name"`
    Spec string `json:"specification"`
    Id   uint32 `json:"some_custom_id"`
}

Leave a Comment