首页 >后端开发 >Golang >如何将 JSON 字符串解组为自定义 Go 标量类型?

如何将 JSON 字符串解组为自定义 Go 标量类型?

Barbara Streisand
Barbara Streisand原创
2024-12-02 13:08:16746浏览

How Can I Unmarshal JSON Strings into Custom Go Scalar Types?

在 Go 中将 JSON 值解组为派生标量类型

问题

在 Go 中,将 JSON 值解组为自定义标量类型可能具有挑战性,因为无法修改 UnmarshalJSON 方法中的标量值。当为从标量派生的类型实现 UnmarshalJSON 时会出现此问题,从而阻止将 JSON 中的字符串自动转换为派生类型的值。

解决方案

要解决此问题,请按照以下步骤操作:

  1. 对解组方法使用指针接收器。这允许在方法内进行更改以反映在原始值中。
  2. 将 JSON 文本解组为纯字符串。删除任何 JSON 引号或转义序列。
  3. 使用派生类型的方法将字符串转换为想要的值。本例中,调用Lookup方法获取PersonID

示例

以下是 PersonID 的 UnmarshalJSON 方法的正确实现:

func (intValue *PersonID) UnmarshalJSON(data []byte) error {
  var s string
  if err := json.Unmarshal(data, &s); err != nil {
    return err
  }
  *intValue = Lookup(s)
  return nil
}

此外,请确保 MyType 结构中的 JSON 标记匹配示例 JSON 中的字段名称。如有必要,请更新 json: "person" 以匹配示例中使用的 JSON 标签。

结论

按照以下步骤,您可以为派生标量类型实现 UnmarshalJSON,从而实现自动转换JSON 字符串转换为所需的值类型。这允许轻松地将 JSON 数据解析为自定义类型。

以上是如何将 JSON 字符串解组为自定义 Go 标量类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn