1

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?

1 Answer 1

9

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 } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.