2016-01-09 3 views
1

J'essaye de décoder certains JSON récupérés via http.Get. Cependant, quand je vérifie les structures que j'initialise avec fmt.Println, elles sont toujours vides.Go - JSON Decoder n'initialisant pas ma structure

Je suppose que c'est parce que la structure de ma structure n'est pas d'accord avec le JSON retourné, mais je ne suis pas sûr de savoir comment le réparer. En général, je ne suis pas tout à fait sûr comment fonctionne le decoder.

C'est le JSON:

{ 
    "response":[ 
    { 
     "list": { 
     "category":"(noun)", 
     "synonyms":"histrion|player|thespian|role player|performer|performing artist" 
     } 
    }, 
    { 
     "list": { 
     "category":"(noun)", 
     "synonyms":"doer|worker|person|individual|someone|somebody|mortal|soul" 
     } 
    } 
    ] 
} 

Voici ce que j'ai essayé jusqu'à présent:

type SynonymResponse struct { 
    lists []SynonymList 
} 

type SynonymList struct { 
    category string 
    synonyms string 
} 

var synonyms SynonymResponse; 
dec := json.NewDecoder(response.Body) 
err := dec.Decode(&synonyms) 
if err != nil { 
    log.Fatal(err) 
} 
fmt.Println(synonyms) 

EDIT: Par @ réponse Leo et @ l'indice de JimB, il y a deux problèmes avec mon tentative. Ci-dessous l'ensemble approprié de struct, bien que Leo a fait remarquer, ce sera vide:

type SynonymResponses struct { 
    resp []SynonymResponse 
} 

type SynonymResponse struct { 
    listo SynonymList 
} 

type SynonymList struct { 
    cat string 
    syns string 
} 

Répondre

6

Pour que votre JSON soit capté par le décodeur, doivent exporter les champs dans votre struct. Cela signifie que vous devez mettre les noms de champs en majuscule. Si vous avez un nom personnalisé dans vos champs -> conversion json, vous pouvez ajouter des tags json à vos structures.

Cela corrigera votre problème:

type SynonymResponse struct { 
    Lists []SynonymList `json:"response"` 
} 

type SynonymList struct { 
    Category string `json:"category"` 
    Synonyms string `json:"synonyms"` 
} 
+0

J'ai mis en œuvre vos modifications suggérées, mais je dois encore struct vides: {[{} {}]} –

+0

@BrianVanover, votre JSON est un objet qui contient un champ "response", pas le SynonymResponse lui-même. – JimB

+0

@JimB Merci pour l'indice! J'ai dû créer une couche supplémentaire de structures. Je vais l'ajouter à ma question pour référence future. –