目录

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}