Как мне убедиться, что сначала разбираются поля корневой структуры, а затем разбираются поля встроенной структуры - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть следующая структура: -

type Inner struct {
    FooInner string `json:"fooInner"`
    BarInner string `json:"barInner,omitempty"`
}

type Root struct {
    Inner
    Foo string `json:"foo"`
    Bar string `json:"bar"`
}

Я хочу, чтобы сначала анализировались поля структуры "Root", а затем поля структуры "Inner". Но здесь сначала анализируются поля внутренней структуры.

1 Ответ

3 голосов
/ 10 апреля 2019

Если вы спрашиваете о маршалинге JSON (который не является синтаксическим анализом) и хотите, чтобы поля маршалировались в определенном порядке, маршалер, как правило, будет маршалировать поля в порядке их индекса и обрабатывать любые встроенные структуры по пути. Индексы структурных полей - как видно из пакета reflect, используемого json.Marhsal - определяются порядком их появления в вашем коде.

Итак, поместите поля, которые вы хотите, первыми, а любые встроенные структуры позже:

type Root struct {
    Foo string `json:"foo"`
    Bar string `json:"bar"`
    Inner // <- move this last
}

Детская площадка Пример

b, _ := json.Marshal(Root{})

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