@Mikkkch

Как Unmarshal определяет в какое поле структуры сбросить данные из json?

Есть несколько записей:
type Masteries []ChampionMastery

type ChampionMastery struct {
    ChampionID                   int
    ChampionLevel                int
    ChampionPoints               int
    LastPlayTime                 int
    ChampionPointsSinceLastLevel int
    ChampionPointsUntilNextLevel int
    ChestGranted                 bool
    TokensEarned                 int
    SummonerID                   string
}

Её json:
[{"championId":157,"championLevel":7,"championPoints":57547,"lastPlayTime":1601655202000,"championPointsSinceLastLevel":35947,"championPointsUntilNextLevel":0,"chestGranted":true,"tokensEarned":0,"summonerId":"qljdJnn2kgOLoNByYPxY7IECDARTZMjNyo4iDskm5vUF55k"},{"championId":238,"championLevel":3,"championPoints":9406,"lastPlayTime":1598356873000,"championPointsSinceLastLevel":3406,"championPointsUntilNextLevel":3194,"chestGranted":false,"tokensEarned":0,"summonerId":"qljdJnn2kgOLoNByYPxY7IECDARTZMjNyo4iDskm5vUF55k"},

И такая
type Rotation struct {
    // Structure that is filled with data after a request for champion-v3
    // Contains IDs for all free champions, IDs for free champions for newbies, etc.
    FreeChampionsIDs               []int `json:"freeChampionIds"`
    FreeChampionsIDsForNewsPlayers []int `json:"freeChampionIdsForNewPlayers"`
    MaxNewPlayerLevel              int   `json:"maxNewPlayerLevel"`
    // More details: https://developer.riotgames.com/apis#champion-v3
}

Её json:
{"freeChampionIds":[20,28,37,42,53,68,80,83,114,157,164,222,236,245,421],"freeChampionIdsForNewPlayers":[18,81,92,141,37,238,19,45,25,64],"maxNewPlayerLevel":10}


Первый и второй случаи отрабатывают корректно, но тогда следует вопрос, зачем ставить метки каждому полю структуры, если unmarshal сам справляется и сгружает из json информацию в соответствующие филды?

Вот, чтобы было немного попонятнее, результат использования Unmarshal к первой структуре(использовалась индексация поэтому структура из списка первая):
{157 7 57547 1601655202000 35947 0 true 0 qljdJnn2kgOLoNByYPxY7IECDARTZMjNyo4iDskm5vUF55k}

Как можете заметить, пусть поля и не называются так, как в json и метки у них не стоят, но все корректно сгружается.
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
А вдруг вы захотите сериализовать ChampionID в "freeChampionIds" . Тогда вы можете
type ChampionMastery struct {
    ChampionID                   int   `json:"freeChampionId"`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы