go语言中常用的功能之一(json的使用)

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

猜你喜欢

转载自blog.csdn.net/wujiangwei567/article/details/86571123