2016-12-12 8 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" 

Для остальных значений это работает S хорошо, когда те значения, когда проще сделать это:

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

Но у меня возникают проблемы с картами

+0

Ваш json не соответствует вашей структуре. Если вы можете изменить один из них, вы должны использовать решение, данное Motakjuq. В противном случае вы можете определить собственный метод MarshalJSON для вашей структуры. – jussius

ответ

1

Если JSON является

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

И если вы хотите отобразить Params в Tel , ваша структура должна быть:

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"