Issue
I want to parse a JSON object in Go, but want to specify default values for fields that are not given. For example, I have the struct type:
type Test struct {
A string
B string
C string
}
The default values for A, B, and C, are “a”, “b”, and “c” respectively. This means that when I parse the json:
{"A": "1", "C": 3}
I want to get the struct:
Test{A: "1", B: "b", C: "3"}
Is this possible using the built-in package encoding/json
? Otherwise, is there any Go library that has this functionality?
Solution
This is possible using encoding/json: when calling json.Unmarshal
, you do not need to give it an empty struct, you can give it one with default values.
For your example:
var example []byte = []byte(`{"A": "1", "C": "3"}`)
out := Test{
A: "default a",
B: "default b",
// default for C will be "", the empty value for a string
}
err := json.Unmarshal(example, &out) // <--
if err != nil {
panic(err)
}
fmt.Printf("%+v", out)
Running this example returns {A:1 B:default b C:3}
.
As you can see, json.Unmarshal(example, &out)
unmarshals the JSON into out
, overwriting the values specified in the JSON, but leaving the other fields unchanged.
Answered By – JW.
Answer Checked By – Terry (GoLangFix Volunteer)