Golang 序列化的一些技巧

记录一些 golang json 序列化使用中的一些小技巧,直接上代码

1.忽略字段相关语法:

type People struct {
    Name   string `json:"name"` // specify "name" as "Name" when serialization
    Age    int  `json:"aGe,omitempty"`//omit if age is empty when serialization
    Gender string `json:"-"` // omit Gender when serialization
}
​
func main() {
    var p People
    p.Name = "John"
    // p.Age = 30
    p.Gender = "male"
    data, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(data))
}
// output:{"name":"John"}

2.关于嵌套

2.1 直接嵌套字段是并列的

type People struct {
    Name   string `json:"name"` // specify "name" as "Name" when serialization
    Age    int  `json:"aGe,omitempty"`//omit if age is empty when serialization
    Gender string `json:"-"` // omit Gender when serialization
    Contact
}
type Contact struct {
    Phone string `json:"phone"` //
    Email string `json:"email"` //
}
func main(){
    p:=People{
        Name:"John",
        Age:30,
        Gender:"male",
        Contact:Contact{
            Phone:"123456",
            Email:"abc@example.com",
        },
    }
    b, err := json.Marshal(p)
    if err!= nil {
        fmt.Println(err)
    }
    fmt.Printf("%v\n",string(b))
}
// output:{"name":"John","aGe":30,"phone":"123456","email":"abc@example.com"}

2.2 别名嵌套

//...
Contact `json:"contact,omitempty"`
//...
​
//ouput:{"name":"John","aGe":30,"contact":{"phone":"123456","email":"abc@example.com"}}

2.3 在不修改原 struct 的情况下 忽略字段(嵌套指针的使用)

// eg: if I want to omit "Password" without modify "User",I can do follow operation:
type User struct {
    Name string `json:"name"`
    Password string `json:"password"`
}
​
type UserShell struct {
    *User
    Password *struct{}  `json:"password,omitempty"`
}
​
func main(){
    u:=User{
        Name:"John",
        Password:"johnpassword",
    }
    b, err := json.Marshal(UserShell{User: &u})
    if err!= nil {
        fmt.Println(err)
    }
    fmt.Printf("%v\n",string(b))
}
​
//output:{"name":"John"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值