【问题标题】:How do you rewrite types in struct?你如何重写结构中的类型?
【发布时间】:2021-12-20 21:56:13
【问题描述】:

我无法更改的来源:

{
    "perfectly_normal": "bar"
    "fooBool": "0"
}

桌子上有什么:

type hwo struct {
    normality  string `json:"perfectly_normal"`
    makeMeBool ?????? `json:"fooBool"`
}

json.Unmarshal(body, hwo)

有什么好办法把"0"/"1"转成false/true

【问题讨论】:

  • 创建自己的类型并为其编写 json marshal/unmarshal 函数。即:type stringyBool bool,因此 stringyBool 从 0/1 字符串值进行编组/解组,否则为布尔值。
  • 查看问题How to unmarshall both 0 and false as bool from JSON了解torek建议的实施。

标签: json go


【解决方案1】:

您可以使用DTO 和方法将传递的DTO 转换为所需的struct

下面是一些伪代码,其中DTO 用于根据DTO 中的值创建一个新的hwo 结构。

这带来了额外的好处,即能够改变 DTO 中的任何数据,在这种情况下,您不仅仅是 intboolean 的转换。

在 cmets 中提到的自定义类型的marshalunmarshal 函数也很好,可能更简单。

type hwo struct {
    normality  string  `json:"perfectly_normal"`
    makeMeBool boolean `json:"fooBool"`
}

type DTO struct {
  normality string
  fooBool   int
}

func ToHwo(dto DTO) hwo {
  fooBool := true
  if dto.fooBool == 0 {
    fooBool = false
  }

  return hwo {
    normality: dto.nornality,
    fooBool: fooBool,
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多