GO自定义 json 解析规则
目录
背景
go json 序列化时,有时候可能不符合我们的要求,比如当字段类型是自定义类型时,我们希望能够自定义序列化和反序列化
go 标准库 json 是提供了自定义实现的方法的,只需要实现 MarshalJSON() 以及 UnmarshalJSON() 方法即可
实现
type i64 int64
type Person struct {
Name string
Age i64 // 把 int64 换成自定义的类型 i64
Sex int
}
// MarshalJSON 执行json.Marshal 的时候会执行此方法
func (j i64) MarshalJSON() ([]byte, error) {
fmt.Println("marshal...")
i2 := int64(j)
i2=18
string := strconv.FormatInt(i2, 10)
return []byte(string), nil
}
// UnmarshalJSON 执行json.Unmarshal 的时候会执行此方法
func (j i64) MarshalJSON(data []byte) error {
// TODO 自定义实现逻辑,处理 data,然后写入 j 即可
return nil
}
func main(){
m:=Person{
Name: "******",
Age: 105308320612483198,
Sex: 1,
}
marshal, _ := json.Marshal(&m)
fmt.Println(string(marshal))
}
marshal… {“Name”:"******",“Age”:18,“Sex”:1}