收到一些字符串后,是否有可能使 marshall 在 getJSONStr 函数中失败?package mainimport ( "fmt" "encoding/json")type obj struct { Name string `json:"name"`}func getJSONStr(s string) (*string, error) { t := new(obj) t.Name = s b, err := json.Marshal(t) if err != nil { return nil, err } str := string(b) return &str, nil}func main() { str, err := getJSONStr("VALIDATE") fmt.Println("str",*str) fmt.Println("err",err)}我一直在努力做到这一点,但没有成功。
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 关注
- 136 浏览
添加回答
举报
0/150
提交
取消