在"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:"-"`
}