2 回答

TA贡献1842条经验 获得超12个赞
您可以json.Marshaler为任一obj或内部的特定字段实施obj。此封送拆收器可以检查字段的值并返回错误。这是一个为字段添加自定义封送拆收器的示例,Name如果Name是"Boom!"
type NameWithValidation string
func (s NameWithValidation) MarshalJSON() ([]byte, error) {
if string(s) == "Boom!" {
return nil, fmt.Errorf("Name '%s' failed validation", s)
}
return json.Marshal(string(s))
}
type obj struct {
Name NameWithValidation `json:"name"`
}
编组时,json.Marshal()
检查类型是否实现json.Marshaler
,如果是,它会调用MarshalJSON()
它们而不是尝试编组项目本身。

TA贡献1921条经验 获得超9个赞
Channel、complex 和 function 值不能用 JSON 编码。尝试对此类值进行编码会导致 Marshal 返回 UnsupportedTypeError。
因此,如果您要修改您的结构以包含这些类型中的任何一种并尝试对其进行编组,您将收到错误消息。
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报