Как разархивировать строку emtpy как ноль - PullRequest
0 голосов
/ 03 октября 2019

Если у меня есть некоторые данные в формате JSON, подобные этому:

{
  nullableID: ""
}

Как я могу получить unmarshalling эту структуру:

help := struct {
  ID *primitive.ObjectID `json:"nullableID",omitempty`
}{}

Для декодирования в help так, чтобы help.ID == nil

1 Ответ

2 голосов
/ 04 октября 2019

Пусть ObjectID реализует интерфейс Unmarshaler и проверит наличие пустой строки:

func (o *ObjectID) UnmarshalJSON(data []byte) error {
  if err := json.Unmarshal(data, o); err != nil {
    return err
  }
  if string(*o) == "" {
    o = nil
  }
  return nil
}

Если тип ObjectID импортирован из другого пакета, вы можете создать новый тип, который переносит этотип:

// objID is a copy of primitive.ObjectID but with it's own json unmarshalling.
type objID struct {
  *primitive.ObjectID
}

func (o *objID) UnmarshalJSON(data []byte) error {
  // Same implementation as above
}

Эта статья объясняет это более подробно.

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