当映射不一致地将布尔值表示为 0 和 false(或 1 和 true)的服务的输出时,它在解组期间有必要采用更宽松的方法。虽然向 JSON 标签添加 ,string 可能还不够,但还有其他可用的解决方案。
解决方案是定义自定义类型(例如 ConvertibleBoolean)来处理不明确的情况布尔值。此类型包含一个 UnmarshalJSON 方法,该方法根据指定的约定将输入数据转换为布尔值。
type ConvertibleBoolean bool func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error { asString := string(data) if asString == "1" || asString == "true" { *bit = true } else if asString == "0" || asString == "false" { *bit = false } else { return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString)) } return nil }
此自定义类型可确保将“1”和“0”等输入值解释为布尔值,允许解析而不会出现错误。
需要注意的是,为了自定义 UnmarshalJSON 方法要正确运行,必须将其实现为指针方法接收器。这是因为指针允许修改底层值。
通过利用这种方法,您可以有效地从 JSON 数据中解组不明确的布尔值,确保结果结构包含预期值,尽管输入数据不一致.
以上是解组 JSON 时如何处理不明确的布尔值(0/1、真/假)?的详细内容。更多信息请关注PHP中文网其他相关文章!