I wish to use the "encoding/json"
package to marshal a struct declared in one of the imported packages of my application.
Eg.:
type T struct {
Foo int
}
Because it is imported, all available (exported) fields in the struct begins with an upper case letter. But I wish to have lower case key names:
out, err := json.Marshal(&T{Foo: 42})
will result in
{"Foo":42}
but I wish to get
{"foo":42}
Is it possible to get around the problem in some easy way?
You could make your own struct with the keys that you want to export, and give them the appropriate json tags for lowercase names. Then you can copy the desired struct into yours before encoding it as JSON. Or if you don't want to bother with making a local struct you could probably make a
map[string]interface{}
and encode that.Have a look at the docs for encoding/json.Marshal. It discusses using struct field tags to determine how the generated json is formatted.
For example:
This will generate JSON as follows: