I need to marshal complex JSON object to GO structure.
So I have source:
"NetworkSettings": {
"Bridge": "",
"SandboxID": "e9736755bc41db307019fde3be0feed51086e6d3e23b0213c59bb5e43f7af214",
"HairpinMode": false,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "2ee283787f45894c3383229d29ada1ccbb7f34b1c1e143e417e7ba75b7f5ebce",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "1c4788fac19973ddc73975613a2aef5a4cc2be446af458c06fa5fa162e8126ff",
"EndpointID": "2ee283787f45894c3383229d29ada1ccbb7f34b1c1e143e417e7ba75b7f5ebce",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
and I need to map it into object like this:
NetworkSettings struct {
IpAddress string
SandboxID string
Gateway string
Ports map[string][]Binding
Networks map[string]map[string]string
}
However because of Networks map[string]map[string]string
I'm getting error
json: cannot unmarshal object into Go value of type string
error restoring containers: json: cannot unmarshal object into Go value of type string
But this is what I need to have a complex map of map structure.
Any idea how to do that?
That error happens because some of the values in the JSON aren't strings, but are integers (IPPrefixLen
for example), and therefore can't be assigned to a string variable.
There are 2 ways to address this. You could use the interface{}
type, so your type definition would become:
NetworkSettings struct {
IpAddress string
SandboxID string
Gateway string
Ports map[string][]Binding
Networks map[string]map[string]interface{}
}
A better solution would probably be to define a type for the Network block:
type Network struct {
NetworkID string
EndpointID string
Gateway string
IPAddress string
IPPrefixLen int
//etc...
}
type NetworkSettings struct {
IpAddress string
SandboxID string
Gateway string
Ports map[string][]Binding
Networks map[string]Network
}