场景1:
客户端请求接口返回json字符串,想将json字符串转成结构体数据、或将结构体数据转成json字符串。
方法:
使用系统模块"encoding/json"的json.Unmarshal方法
假设:
接口响应body内容是response.String() ,如下
{
Success: true,
ErrCode: 0,
ErrMsg: "登录成功",
Data: main.data {
Token: "u_8e3e81e1155548e7a894fd2c09bcf571",
UserId: "-1103",
NickName: "12000001203",
Avatar: "https://avatar.xxxxx.com/avatar_5afb03a888c74dbd80f1e24d6d0feed1.jpg",
Mobile: "12000001203",
Level: 0,
FirstRegister: false
},
TotalCount: "",
Code: 0,
NotSuccess: false,
Message: "登录成功"
}
代码:
将json字符串数据,转成结构体对应数据字段
// 获取响应body
println("response.body:",response.String())
// 获取响应header
// 获取响应statusCode
println("response.statusCode:",response.StatusCode)
// 获取响应header cookie
// 定义结构体
type data struct {
Token string `json:"token"`
UserId string `json:"userId"`
NickName string `json:"nickname"`
Avatar string `json:"avatarUrl"`
Mobile string `json:"mobile"`
Level int `json:"level"`
FirstRegister bool `json:"firstRegister"`
}
type Res struct {
Success bool `json:"success"`
ErrCode int `json:"errCode"`
ErrMsg string `json:"errMsg"`
Data data `json:"data"` // 子节点
TotalCount string `json:"totalCount"`
Code int `json:"code"`
NotSuccess bool `json:"notSuccess"`
Message string `json:"message"`
}
// 实例化结构体
var res Res
// json字符串[转]结构体
err := json.Unmarshal([]byte(response.String()),&res)
//
if err !=nil{
fmt.Println(err)
}
//
fmt.Printf("%#v\n",res)// GoJSON2Struct.Teacher{Id:11, Name:"王老师", Age:30, Tno:"t201205"}
// 获取结构体属性的值
fmt.Println("res.Success:",res.Success)//
fmt.Println("res.ErrCode:",res.ErrCode)//
fmt.Println("res.ErrMsg:",res.ErrMsg)//
fmt.Println("res.Data.Token:",res.Data.Token)// json字符串对应结构体子结构体节点
fmt.Println("res.Data.UserId:",res.Data.UserId)//
fmt.Println("res.Data.NickName:",res.Data.NickName)//
fmt.Println("res.Data.Avatar:",res.Data.Avatar)//
fmt.Println("res.Data.Mobile:",res.Data.Mobile)//
fmt.Println("res.Data.Level:",res.Data.Level)//
fmt.Println("res.Data.FirstRegister:",res.Data.FirstRegister)//
fmt.Println("res.TotalCount:",res.TotalCount)//
fmt.Println("res.Code:",res.Code)//
fmt.Println("res.NotSuccess:",res.NotSuccess)//
fmt.Println("res.Message:",res.Message)//
控制台输出内容
2.场景2:
客户端请求接口返回json字符串,想将json字符串转成结构体数据、或将结构体数据转成json字符串。
方法:
使用系统模块"encoding/json"的json.Marshal方法
定义结构体,并实例化结构体,将结构体转成json字符串
// 结构体
type Student struct {
Id int `json:"id"` // 如果变量打上了json标签,如:Name旁边的 `json:"name"` ,那么转化成的json key就用该标签“name”,否则取变量名作为key,如“Age”,“HIgh”。如果定义为小写字母开头 私有属性不能被json包访问
Name string `json:"name"`// [注意]如果定义为小写字母开头 私有属性不能被json包访问
Age int `json:"age"`
Sno string `json:"son"`
}
// 实例化结构体,相当于类的实例化
var s = Student{
Id: 11,
Name: "小王",
Age: 10,
Sno: "n201205",
}
fmt.Printf("%#v\n", s) // GoStructJSON.Student{Id:11, Name:"小王", Age:10, Sno:"n201205"}
// struct转json字符串
jsonByte,_ := json.Marshal(s)
// json转字符串
jsonStr := string(jsonByte)
fmt.Println(jsonStr) // {"id":11,"name":"小王","age":10,"son":"n201205"}