Перечислять записи срезов - PullRequest
0 голосов
/ 23 марта 2020

Если у меня есть этот вывод

Stuff {
    "Items": [
            {
                "title": "test1",
                "id": "1",
            },
            {
                "title": "test",
                "id": "2",
            },
        ],
        "total": 19
    },
}

Но нужно вместо этого:

stuff {
    "Items": [
        1:{
            "title": "test1",
            "id": "1",
        },
        2:{
            "title": "test",
            "id": "2",
        },
    ],
    "total": 19
    },
}

В настоящее время мои структуры построены так:

Stuff struct {
    Items           []Items         `json:"items"`
    Total           int             `json:"total"`
} `json:"stuff"`


type Items struct {
    Title             string        `json:"title"`
    ID                string        `json:"id"`
}

I Инициируйте срез:

stuff := make([]Items, 10)    // Lets say I have 10 entries

И добавьте:

Stuff.Items = stuff
Stuff.Total = len(Stuff.Items)

Теперь я не уверен в том, как это подсчитать. Таким образом, для каждого элемента записи должно быть число, начиная с 1 - 10 (в этом примере)

1 Ответ

1 голос
/ 23 марта 2020

Учитывая ваши объявления типов 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 является статически типизированным , и каждая структура может содержать только те поля, которые вы объявили для нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...