1.定义
marshal:输入数据,转化为[]byte
入参:我们输入的数据,类型为任意类型
出参:返回数据为结果和错误 结果为[]byte []uint8类型 全部都是数字, 使用os.Stdout.Write(b)将ascii转化为字符
unmarshal:将[]byte转化为任意我们规定的类型
入参:第一个参数是我们输入的数据,类型是[]byte uint8类型的切片;第二个参数是接受器可以为任何类型数据,自定义
出参:错误
目的:便于存储传递
2.marshal
package main
import (
"encoding/json"
"fmt"
"os"
"reflect"
)
func main() {
type ColorGroup struct {
ID int `json:"dd达到"`
Name string
Colors []string
}
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
b, err := json.Marshal(group)
fmt.Println(reflect.TypeOf(b))
fmt.Println(b)
if err != nil {
fmt.Println("error:", err)
}
// 会把ascii码转化为我们对应的值
os.Stdout.Write(b)
}
// {"userid":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
3.unmarshal
package main
import (
"encoding/json"
"fmt"
"reflect"
)
type Animal struct {
Name string
Order string
site string
}
func main() {
// json在go中是字符串的类型
// 但是json在go中其实是类似于结构体的类型
// 所以json字符串与结构体都向一个方向进行转化,那就是byte切片
var jsonBlob = []byte(`[
{"Name": "aaa", "Order": "bbb"}
]`)
fmt.Println(reflect.TypeOf(jsonBlob))
fmt.Println(jsonBlob)
var animals Animal
fmt.Println(reflect.TypeOf(animals))
// 会按照animala的方式进行编码
// 要求
// 第一个参数[]byte
// 第二个参数任何类型
type Phone interface {
}
var aa Phone
err := json.Unmarshal(jsonBlob, &aa)
if err != nil {
fmt.Println("error:", err)
}
// %+v会打印出键来
fmt.Printf("%+v", aa)
fmt.Println(reflect.TypeOf(aa))
}
// [{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]