go语言中json的使用
1. json的编码和解码
1.1 json的编码
Marshal(v interface{}) ([]byte, error)
1.2 json的解码
Unmarshal(data []byte, v interface{}) error
2. json的使用实例
step1 定义接数据编码和解码结构体
// 定义接收的结构
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
type Data struct {
Total int `json:"total"`
List []User `json:"list"`
}
注意:如果我们接收的类型不是很明确,可以直接先定义成 interface{}
通用类型接收 再做处理
step2 编码数据
// 组装数据
data := Data{}
data.Total = 15
u1 := User{Name: "zhangsan", Age: 15}
data.List = append(data.List,u1)
u2 := User{Name: "lisi", Age: 28}
data.List = append(data.List,u2)
vv , _ := json.Marshal(data)
fmt.Printf("%s\n",vv) //{"total":15,"list":[{"name":"zhangsan","age":15},{"name":"lisi","age":28}]}
step3 解码数据
orgData := Data{}
err := json.Unmarshal(vv,&orgData)
if err != nil {
panic(err)
}
fmt.Println(orgData) //{15 [{zhangsan 15} {lisi 28}]}
3. beego中json的使用
比如控制器
UserController
的方法getUser
的使用
type ResponseData {
State int `json:"state"` //返回状态
Message string `json:"message"` //返回消息
}
func (c *UserController) getUser() {
response := ResponseData{
State : 10000,
Message :"ok"
}
c.Data["json"] = response
c.ServeJSON()
return
}
当然,结构体的定义数据决定了返回的数据,如果加上 json:"name"
返回时,对应的名称就会被替换
更多详情参考:http://sudobash.cn/post/coding/2018/05/coding/golang/go-unmarshal-json.html
文中结构体里面类型后面的字符串可以参考:结构体的反射:https://studygolang.com/articles/2553