Reputation: 918
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?
Upvotes: 1
Views: 553
Reputation: 696
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
}
Upvotes: 9