На Голанге имеет значение случай с именем поля JSON при выполнении маршала и унмаршала? - PullRequest
0 голосов
/ 31 октября 2018

Функции маршала и унмаршала строго чувствительны к регистру?

Следующая структура определяет заявку:

    type TicketInfo struct {

         TicketKey                  string `json:"ticketKey"`       
         Ticketextnum               string `json:"ticketextnum"`        
         TicketDate                 string `json:"ticketDate"`      
         TicketDesc                 string `json:"ticketDesc"`
    }       

Эта строковая форма этого json будет передана в качестве отдельного параметра в полезной нагрузке вызова API исходными системами. Что произойдет, если исходная система отправит, например, «TicketKey» вместо «ticketKey» для первого поля. Будет ли json.Marshal правильно получить поле ticketKey?

1 Ответ

0 голосов
/ 31 октября 2018

На это легко ответить, прочитав документы , или с помощью простого теста. Но, в частности, см. Эти заметки (выделение добавлено) для Marshal :

Структурные значения кодируются как объекты JSON. Каждое экспортированное структурное поле становится членом объекта, используя имя поля в качестве ключа объекта , если только поле не опущено по одной из причин, указанных ниже.

Кодировка каждого поля структуры может быть настроена с помощью строки формата, хранящейся под ключом "json" в теге поля структуры. В строке формата указывается имя поля , за которым, возможно, следует разделенный запятыми список параметров. Имя может быть пустым для указания параметров без переопределения имени поля по умолчанию.

и Unmarshal :

Чтобы разархивировать JSON в структуру, Unmarshal сопоставляет входящие ключи объекта с ключами, используемыми Marshal (либо именем структурного поля, либо его тегом), предпочитая точное совпадение, но также принимая совпадение без учета регистра, По умолчанию ключи объекта, которые не имеют соответствующего структурного поля, игнорируются (альтернативный вариант см. В разделе Decoder.DisallowUnknownFields).

Итак, TL; DR; для маршалинга регистр точно соблюдается, а для маршалинга точный регистр предпочтителен с отступлением от нечувствительного к регистру совпадения.

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