golang comment décoder json dans les structures
Je suis en train d'essayer de décoder certains json dans golang, mais certains champs n'obtenez pas décodé.
Voir le code s'exécutant dans le navigateur ici:
Ce que je fais mal ?
J'ai besoin d'uniquement les enregistrements MX donc je n'ai pas de définir les autres champs. Si je comprends bien le godoc vous n'avez pas besoin de définir les champs que vous ne l'utilisez pas/besoin.
//You can edit this code!
//Click here and start typing.
package main
import "fmt"
import "encoding/json"
func main() {
body := `
{"response": {
"status": "SUCCESS",
"data": {
"mxRecords": [
{
"value": "us2.mx3.mailhostbox.com.",
"ttl": 1,
"priority": 100,
"hostName": "@"
},
{
"value": "us2.mx1.mailhostbox.com.",
"ttl": 1,
"priority": 100,
"hostName": "@"
},
{
"value": "us2.mx2.mailhostbox.com.",
"ttl": 1,
"priority": 100,
"hostName": "@"
}
],
"cnameRecords": [
{
"aliasHost": "pop.a.co.uk.",
"canonicalHost": "us2.pop.mailhostbox.com."
},
{
"aliasHost": "webmail.a.co.uk.",
"canonicalHost": "us2.webmail.mailhostbox.com."
},
{
"aliasHost": "smtp.a.co.uk.",
"canonicalHost": "us2.smtp.mailhostbox.com."
},
{
"aliasHost": "imap.a.co.uk.",
"canonicalHost": "us2.imap.mailhostbox.com."
}
],
"dkimTxtRecord": {
"domainname": "20a19._domainkey.a.co.uk",
"value": "\"v=DKIM1; g=*; k=rsa; p=DkfbhO8Oyy0E1WyUWwIDAQAB\"",
"ttl": 1
},
"spfTxtRecord": {
"domainname": "a.co.uk",
"value": "\"v=spf1 redirect=_spf.mailhostbox.com\"",
"ttl": 1
},
"loginUrl": "us2.cp.mailhostbox.com"
}
}}`
type MxRecords struct {
value string
ttl int
priority int
hostName string
}
type Data struct {
mxRecords []MxRecords
}
type Response struct {
Status string `json:"status"`
Data Data `json:"data"`
}
type apiR struct {
Response Response
}
var r apiR
err := json.Unmarshal([]byte(body), &r)
if err != nil {
fmt.Printf("err was %v", err)
}
fmt.Printf("decoded is %v", r)
}
OriginalL'auteur user3721073 | 2014-06-19
Vous devez vous connecter pour publier un commentaire.
Conformément à l'aller documentaiton sur json.Unmarshal, vous ne pouvez décoder vers les champs exportés, la raison principale étant que les paquets externes (tels que
encoding/json
) ne peut pas acces désexporter champs.Si votre json ne répond pas à l'aller convention pour les noms, vous pouvez utiliser le
json
balise dans vos champs pour modifier la mise en correspondance entre json clé et structure du champ.Exemple:
OriginalL'auteur Elwinar
Vous devez Majuscules struct champs:
http://play.golang.org/p/EEyiISdoaE
OriginalL'auteur leiyonglin
La
encoding/json
package ne peut déchiffrer dans exporté struct champs. VotreData.mxRecords
membre n'est pas exporté, il est ignoré lors du décodage. Si vous renommez l'usage de la majuscule, le JSON package avis.Vous aurez besoin de faire la même chose pour tous les membres de votre
MxRecords
type.OriginalL'auteur James Henstridge