2016-07-07 77 views
1

我需要將複雜的JSON對象封送到GO結構。複雜的JSON封送到GoLang對象

所以我有來源:

"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" 
      } 
     } 

,我需要將其映射到對象是這樣的:

NetworkSettings struct { 
    IpAddress string 
    SandboxID string 
    Gateway string 
    Ports  map[string][]Binding 
    Networks map[string]map[string]string 
} 

的但是因爲Networks map[string]map[string]string我收到提示

json: cannot unmarshal object into Go value of type string 
error restoring containers: json: cannot unmarshal object into Go value of type string 

但這是我需要有一個複雜的地圖結構地圖。

任何想法如何做到這一點?

回答

9

發生此錯誤是因爲JSON中的某些值不是字符串,而是整數(例如IPPrefixLen),因此無法將其分配給字符串變量。

有兩種方法可以解決這個問題。您可以使用interface{}類型,所以你的類型定義將成爲:

NetworkSettings struct { 
    IpAddress string 
    SandboxID string 
    Gateway string 
    Ports  map[string][]Binding 
    Networks map[string]map[string]interface{} 
} 

一個更好的解決方案可能會定義網絡塊類型:

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 
}