json忽略标签(“-”)在嵌入式子结构上不起作用

时间:2019-03-08 20:14:54

标签: json go nested tags unmarshalling

我一直在阅读许多相关的问题,但是找不到真正适合我问题的内容。我正在尝试解组复杂的对象。

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
    }
  }
}

进入一个结构实例层次结构,其中AlreadyOrderedQuantityForReplenishment不为空,在解码后,此字段将被设置为和空映射,覆盖初始值。

为什么解码器不完全忽略文档中指定的字段?我想念什么吗?

非常感谢您的帮助,

(如果有帮助)在(第一)之前(第二)之后添加检查器的屏幕截图

before after

1 个答案:

答案 0 :(得分:0)

您的问题与嵌入式结构无关-常规结构也会发生相同的问题。

编码器将跳过使用标记限定符"-"标记的编码结构字段。 解码器在初始化结构时,对于未通过解码过程初始化的任何字段,都将使用零值。因此,您的地图将被初始化为nil(空)地图。

如果要保留设置,则需要编写自己的(JSON或BSON)封送处理程序(可行-但不平凡)。或者,在解码过程之后恢复所有零值可能更简单。