2016-12-12 3 views
-1

ich eine Zuordnung innerhalb einer Struktur wie folgt haben:Der beste Weg zum Speichern/Decoder json innerhalb struct Mapping

type Red struct { 
     **other 
     Tel map[string]string `json:"Tel"` 
} 

erhalte ich meine Daten json die folgende Art und Weise formated

{ 
"Params":[{"rewew": "tref"},{"Value": "x"},....]  
} 

Und ich bin Suche nach der effektivsten Art und Weise der Bestückung meiner Struktur mit den Daten, so dass

Für den Rest der Werte funktioniert es s gut, wenn diejenigen simplier Werte sind, wenn dies zu tun:

var t Red 
decode := json.NewDecoder(req.Body) 
decode.Decode(&t) 

Aber ich habe Probleme mit Karten

+0

Ihr JSON passt nicht zu Ihrer Struktur. Wenn Sie eines ändern können, sollten Sie die Lösung von Motakjuq verwenden. Andernfalls können Sie eine benutzerdefinierte MarshalJSON-Methode für Ihre Struktur definieren. – jussius

Antwort

1

Wenn Ihr JSON ist

{ 
    "Params":[{"rewew": "tref"},{"Value": "x"},....]  
} 

Und wenn Sie wollen Params in Tel zur Karte , sollte Ihre Struktur sein:

type Red struct { 
    **other 
    Tel []map[string]string `json:"Params"` 
} 

Und Sie können neue Elemente wie hinzufügen:

red.Tel = append(red.Tel, map[string]string{"rewew": "tref"}) 
red.Tel = append(red.Tel, map[string]string{"Value": "x"}) 

Aber ich denke, es gibt einen besseren Weg, es zu tun, wenn Sie die Anfrage zu ändern und die Tasten erlaubt sind nicht selbst wiederholen, eine JSON wie

mit
{ 
    "Params":{"rewew": "tref", "Value": "x"}  
} 

sollte die Struktur sein:

type Red struct { 
    **other 
    Tel map[string]string `json:"Params"` 
} 

und die Daten wie verwenden können:

red.Tel["rewew"] = "tref" 
red.Tel["Value"] = "x"