1. json.Marshal(person):将数据结构转换为json字符串
type Student struct {
Name string `json:"name"`
Age int `json:"age"`
High int `json:"high"`
Sex string `json:"sex"`
Class *Class `json:"class"`
}
type Class struct {
ClassName string `json:"classname"`
Grade int `json:"grade"`
}
func main() {
//实例化一个数据结构,用于生成json字符串
person := Student{
Name: "张三",
Age: 18,
High: 182,
Sex: "男",
}
//指针变量
class := new(Class)
class.ClassName = "1班"
class.Grade = 3
person.Class = class
//Marshal失败时err!=nil
jsonbyte, err := json.Marshal(person)
if err != nil {
fmt.Println("生成json字符串错误")
}
//jsonbyte是[]byte类型,转化成string类型便于查看
fmt.Println(string(jsonbyte))
}
//输出:
//{"name":"张三","age":18,"high":182,"sex":"男","class":{"classname":"1班","grade":3}}
2. json.Unmarshal(str, &stu):将json字符串转换为数据结构
type Student struct {
Name interface{} `json:"personname"`
Age interface{} `json:"age"`
High interface{} `json:"high"`
Sex interface{} `json:"sex"`
Class interface{} `json:"class"`
Message interface{} `json:"message"`
}
type Class struct {
ClassName string `json:"classname"`
Grade int `json:"grade"`
}
func main() {
//json字符中的"引号,需用\进行转义,否则编译出错
data := "{\"personname\":\"张三\",\"age\":18,\"high\":182,\"sex\":\"男\",\"class\":{\"classname\":\"1班\",\"grade\":3},\"message\":\"测试成功!\"}"
//转换格式
str := []byte(data)
//Unmarshal的第一个参数是json字符串,第二个参数是接受json解析的数据结构。
//第二个参数必须是指针,否则无法接收解析的数据,如stu仍为空对象Student{}
//注:可以直接stu:=new(Student),此时的stu自身就是指针
stu := Student{}
err := json.Unmarshal(str, &stu)
//解析失败会报错,如json字符串格式不对,缺"号,缺}等。
if err != nil {
fmt.Println(err)
}
fmt.Println(stu)
}
//输出:
//{张三 18 182 男 map[classname:1班 grade:3] 测试成功!}