gin接收json数组

原创
2022/07/29 09:56
阅读数 1.3W

一、gin接收json数组

    1、前端请求的json数据格式如下:

{
"id": "aadd",
"users":[{"userid":"123a","remark":"3sdff"},{"userid":"345b","remark":"ok"}]
}

 2、后台定义结构体来接收这个json对象:

type UsersInfo struct {
	Id    string          `gorm:"column:id" json:"id"`                 //
	Users json.RawMessage `gorm:"column:users;type:json" json:"users"` //
}

users属性的类型定义成json.RawMessage,再定义一个对象来解析users数组内的对象:

type UserInfo struct {
	UserId string `gorm:"column:userid" json:"userid"` //
	Remark string `json:"remark"`
}

如果这两个结构体,只负责接收前端参数,不需要映射数据库记录时,gorm部分可以去掉。

3、gin接收参数并解析json数组中的内容:

    // 保存整体json对象	
    var usersInfo UsersInfo
    // c是*gin.Context对象
	_ = c.ShouldBindJSON(&usersInfo)
    // 保存json数组内容的对象
	var userArr []*UserInfo
    //序列化json数组对象,得到byte数组
	joinBytes, _ := usersInfo.Users.MarshalJSON()
    //解析byte数组,赋值给userArr
    //如果Users不是结构化的json数组,则将其转化为map数组
	json.Unmarshal(joinBytes, &joinArr)
	for i := 0; i < len(joinArr); i++ {
		fmt.Println(joinArr[i].UserId);
		fmt.Println(joinArr[i].Remark);
	}

4、mysql数据库表中的字段类型为json时,对应结构体的属性类型,也要定义为json.RawMessage,可以直接保存到数据库和从数据库直接查询出来。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部