go中json的使用
文章目录
go 原生提供了json的加码解码支持,import "encoding/json"
就可以了。
1. encode 编码
json的 encode 加码方法是:
func Marshal(v interface{
}) ([]byte, error)
正是因为参数是接口 interfae{},所以,理论上可以传入任何数据。
1.1 struct 编码
我们一般都用用结构体作为数据源,给他json加码操作,因为它的类型可以加入任意的数据类型,符合json字符串的特性。
我们先定义2个结构体,作为数据类型。
//1. 先定义1个结构体
type Animal struct {
Name string
Order string
}
// 定义结构体嵌套
type List struct {
Ret int
Info []Animal
}
要想对结构体实现json加码操作,得实例化1个变量出来。
//实例化1个变结构体量
var list0 = Animal{
Name: "wo", Order: "HELLO"}
//encode
list9, err := json.Marshal(list0)
if err != nil {
_ = fmt.Errorf("%v", err)
}
//输出的list9是一个字符的切片 []byte, 得用string() 方法转换成字符串
fmt.Printf("%v\n", string(list9))
输出的json字符串如下:
{"Name":"wo","Order":"HELLO"}
我们来1个复杂的结构体,实现更复杂的json
// 结构体重复嵌套
//由于需要嵌套,所以得定义1个切片结构体。
var animals []Animal
//通过append给切片添加数据。
animals = append(animals, Animal{
Name: "Platypus", Order: "Monotremata"})
animals = append(animals, Animal{
Name: "Quoll", Order: "Dasyuromorphia"})
// encode
list2, err := json.Marshal(animals)
if err != nil {
_ = fmt.Errorf("%v", err)
}
// 转换成字符串
fmt.Printf("%v\n", string(list2)) //
输出json如下:
[{"Name":"Platypus","Order":"Monotremata"},{"Name":"Quoll","Order":"Dasyuromorphia"}]
我们再来看另外一种嵌套方式,子元素嵌套类型。
// 3. 子元素嵌套类型的结构体
var animals []Animal
//通过append给切片添加数据。
animals = append(animals, Animal{
Name: "Platypus", Order: "Monotremata"})
animals = append(animals, Animal{
Name: "Quoll", Order: "Dasyuromorphia"})
//初始化
var list1 = List{
Ret: 0, Info: animals}
list3, err := json.Marshal(list1)
if err != nil {
_ = fmt.Errorf("%v", err)