前言
json数据格式通常包含两个操作:序列化(把对象转换成JSON数据类型)和反序列化(把JSON数据类型转换成对象),二者操作互逆。
Go语言中相关标准库为encoding/json
。
示例代码
package main import ( "encoding/json" "fmt" ) type JsonExample struct { Name string `json:"name,omitempty"` // 序列化后显示为name,若其值为空,则不显示该字段 Age int `json:"age"` // 序列化后显示为age School string `json:"university"` // 序列化后显示为university Class []string `json:"class"` } // 对象序列化为json func JsonMarshal() { var jex JsonExample = JsonExample{ Name: "Go", Age: 12, School: "TsingHua", Class: []string{"YuWen", "ShuXue", "YingYu"}, } by, _ := json.Marshal(jex) fmt.Println(string(by)) } // json反序列化为对象 func JsonUnmarshal() { var v JsonExample by := []byte(`{"name": "python","age":18,"university": "ustc","class": ["WuLi","HuaXue","ShengWu"]}`) json.Unmarshal(by, &v) fmt.Printf("%+v\n", v) } func main() { JsonMarshal() // {"name":"Go","age":12,"university":"TsingHua","class":["YuWen","ShuXue","YingYu"]} fmt.Println("=============") JsonUnmarshal() // {Name:python Age:18 School:ustc Class:[WuLi HuaXue ShengWu]} }
注意事项:
- 如果知道反序列化之后的具体结构,那么应该先定义一个符合反序列之后的结构体。
- 如果不知道反序列化之后的具体结构,那么应该使用
interface
来表示任意类型。 - 结构体定义时的标签用于指定序列化之后的显示。
参考文档
- 谢伟《Go语言项目开发上手指南》机械工业出版社
- 官方json包文档