JSON игнорировать тег ("-") не работает на встроенной подструктуры - PullRequest
2 голосов
/ 08 марта 2019

Я читал много связанных вопросов, но не смог найти ничего, что действительно соответствовало бы моей проблеме. Я пытаюсь разобрать сложный объект.

type DC struct {

    //other fields
    ReplenishmentData map[string]ProductReplenishment `bson:"-"`
    //other fields
}

type ProductReplenishment struct {
    //Other fields
    SafetyStockInDay int `json:"SafetyStockInDay" bson:"SafetyStockInDay"`
    AlreadyOrderedQuantityForReplenishment *map[float64]*UnitQuantity `json:"-" bson:"-"`
    //Other fields
}

Допустим, я декодирую следующий json:

{
  "ReplenishmentData": {
    "000822-099": {
      "SafetyStockInDay": 7
    },
    "001030-001": {
      "SafetyStockInDay": 7
    }
  }
}

В иерархию экземпляров структуры, в которой AlreadyOrderedQuantityForRepleniment не является пустым, после декодирования это поле будет установлено на пустую карту, переопределяя начальное значение.

Почему декодер не игнорирует поле все вместе, как указано в документе? Я что-то упустил?

Большое спасибо за любую помощь,

Добавление скриншота инспектора до (первого) / после (второго), если это может помочь

before after

1 Ответ

0 голосов
/ 08 марта 2019

Ваша проблема не связана со встроенными структурами - такая же проблема может возникнуть с обычной структурой.

Кодеры пропустят поля структуры кодирования, отмеченные квалификатором тега "-". Декодеры при инициализации структуры будут использовать нулевое значение для любого поля, которое не инициализируется в процессе декодирования.Таким образом, ваша карта будет инициализирована нулевой (пустой) картой.

Если вы хотите сохранить настройки, вам нужно написать свой собственный (JSON или BSON) маршалер (выполнимый, но не тривиальный).Или же может быть проще восстановить любые нулевые значения после процесса декодирования.

...