2017-10-16 5 views
2

J'ai 2 struct:Decode corps de réponse 2e niveau struct

type List struct { 
    ListID string `json:"listid"` 
    Name string `json:"name"` 
    Users []User `json:"users"` 
} 

type User struct { 
    Email string `json:"email"` 
    Name string `json:"name"` 
} 

J'appelle un point final et obtenir avec succès une réponse qui a la structure ci-dessous:

{ 
"Results":[ 
    {"Email": "[email protected]", "Name": "test1" "State": "Active",…}, 
    {"Email": "[email protected]", "Name": "test2" "State": "Active",…}, 
    {"Email": "[email protected]", "Name": "test3", "State": "Active",…} 
], 
"SomeOtherStuff": "email" 
} 

Je suis en train de décoder la réponse JSON à ma structure comme ceci:

err = json.NewDecoder(response.Body).Decode(&list.Users) 

Mais il n'y a pas d'attribut "Results" dans mon stru ct pour mapper à. Comment puis-je mapper uniquement la clé Résultats de la réponse à mon tableau de structures utilisateur?

Répondre

2

Pour récupérer vos données, il y a au moins deux options:

Decode en carte [string] l'interface {}

m := create(map[string]interface{}) 
err = json.NewDecoder(response.Body).Decode(&m) 

Ensuite, utilisez la m [ "résultats"] pour accéder à vos utilisateurs .

Ou vous pouvez Décoder en un conteneur struct puis affecter list.Users = container.Results.

type Container struct { 
    Results []User `json:"Results"` 
    SomeOtherStuff string `json:"SomeOtherStuff"` 
} 

Pour avoir une idée de struct pour regarder JSON arbitraire à json2go.

+0

J'avais l'habitude d'une seconde approche. Je vous remercie – mallix