用golang读取一个json,发现有一个字段的值有的是int类型,有的是string类型。
解决思路就是自定义一个类型,然后解析json的时候,自定义函数进行判断。
type StringOrInt string
func (s *StringOrInt) UnmarshalJSON(data []byte) error {
// 尝试解析为字符串
var str string
if err := json.Unmarshal(data, &str); err == nil {
*s = StringOrInt(str)
return nil
}
// 尝试解析为数字
var num int
if err := json.Unmarshal(data, &num); err == nil {
*s = StringOrInt(fmt.Sprintf("%d", num))
return nil
}
return fmt.Errorf("cannot unmarshal %s into StringOrInt", string(data))
}
type Detail struct {
ID int `json:"id"`
CpId StringOrInt `json:"cpId"`
}
评论