Учитывая ваши объявления типов Stuff
и Items
, вот простая структура данных и ее JSON dump:
s := Stuff{Items: []Items{Items{"test1", "1"}, Items{"test2", "2"}}, Total: 10}
j, err := json.MarshalIndent(s, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(j))
JSON:
{
"items": [
{
"title": "test1",
"id": "1"
},
{
"title": "test2",
"id": "2"
}
],
"total": 10
}
To Посмотрите, что вы хотите вместо этого, нет никакого вызова пакета волхвов c json
, чтобы сделать это. Вам нужно будет создать новую структуру данных, которая будет отражать структуру желаемого результата.
В этом случае простая карта будет делать:
m := make(map[string]Items)
for _, item := range s.Items {
m[item.ID] = item
}
А теперь, если вы JSON - сбросив эту карту, вы получите:
{
"1": {
"title": "test1",
"id": "1"
},
"2": {
"title": "test2",
"id": "2"
}
}
Обратите внимание, что сейчас я не обертываю ее с Stuff
, потому что Stuff
имеет разные поля. Go является статически типизированным , и каждая структура может содержать только те поля, которые вы объявили для нее.