go Json解析

在"encoding/json"包中提供了对json的支持

① 序列化 - Marshal()

把struct序列化成Json对象

import (
    "encoding/json"
    "fmt"
)

type Message struct {
    Name  string
    Body  string
    Time  int64
}

func main() {
    m := Message{"Alice", "Hello", 1294706395881547000}
    b, _ := json.Marshal(m)
    fmt.Println(string(b))
}

输出

{"Name":"Alice","Body":"Hello","Time":1294706395881547000}

② 反序列化 - Unmarshal()

var m1 Message
json.Unmarshal(b, &m1)
fmt.Println(m1)  

输出

{Alice Hello 1294706395881547000}

注意:json对象一般都是小写表示,Marshal之后json对象的首字母依然是大写,如果序列化之后名称想要改变如何实现,答案就是 struct tags


struct tags

决定Marshal和Unmarshal函数如何序列化和反序列化数据

① 指定json field name

type MyStruct struct {
    SomeFiled string `json:"somefield"`
}

② 指定field是empty时的行为

type MyStruct struct {
    SomeFiled string `json:"somefield,omitempty"`
}

omitempty告诉Marshal函数如果field的值是zero-value,那么序列化后的json object不包含此field

③ 跳过field

type MyStruct struct {
    SomeFiled string `json:"-"`
}