2016-12-12 46 views
-1

我有一個結構如下內的映射:最好的方法/結構映射裏解碼JSON

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

我收到我的JSON數據格式化以下方式

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

而我搜索最有效的方式填充我的結構與數據,以便

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

對於其餘值的工作沒事時,那些這樣做的時候是simplier值:

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

,但我有與地圖

+0

你的json與你的結構不匹配。如果你可以改變任何一個,你應該使用Motakjuq給出的解決方案。否則,你可以爲你的結構定義一個自定義的MarshalJSON方法。 – jussius

回答

1

麻煩如果你的JSON是

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

如果你想圖ParamsTel ,你的結構應該是:

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

您可以添加新的元素,如:

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

但是,我認爲這是一個更好的方式來做到這一點,如果你允許更改請求和密鑰不重複自己,使用JSON像

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

的結構應該是:

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

,你可以使用數據,如:

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