json忽略标记(“ - ”)不在嵌入式子结构上工作

问题描述 投票:2回答:1

我一直在阅读很多相关问题,但找不到任何符合我问题的东西。我试图解开一个复杂的对象。

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

进入一个结构实例层次结构,其中已经OrderedQuantityFor Replenishment不为空,解码后该字段将被设置为空映射,覆盖初始值。

为什么解码器不会忽略文档中指定的字段?我错过了什么吗?

非常感谢您的帮助,

如果可以提供帮助,请在(第一个)/之后(第二个)之前添加检查器的屏幕截图

before after

json go nested tags unmarshalling
1个回答
0
投票

您的问题与嵌入式结构无关 - 常规结构会出现同样的问题。

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

如果你想保留设置,你需要编写自己的(JSON或BSON)编组程序(可行 - 但不是无关紧要)。或者,在解码过程之后恢复任何零值可能更简单。

© www.soinside.com 2019 - 2024. All rights reserved.