【Golang后端】如果成功跳出 返回JSON数组的操作坑?

废话不多说,排版不多管了,直接把问题拿出来!又卡我几个小时
我定义了结构体数组,将数据库中的用户数据拿出来存储进去,然后按照总分顺序排名成功!好了,我开始返回JSON形式了:
在这里插入图片描述
但不幸的事情是:前端需要的是数组形式!!!,并且如上方法直接返回的话,返回结果按照字典序排列,不能保持上述键值对的顺序!!!看下图!顺序是字典序排列!
在这里插入图片描述
在这里插入图片描述
那么——我们返回一两个参数还可以用gin.H{ }来解决,参数一多,再加上有序性,就得换一种方法来返回JSON数组了! 下面的代码是通常可以用到的:

//这种通常用gin.H
c.JSON(http.StatusOK, gin.H{
	"code": 200
	"msg":  succeed_login
})

我们要返回JSON有序数组,OK,那就直接给切片(大小刚合适),但是!我们因为前期需要排序呀,所以定义的数组方便运算,而数组大小又是开很大的呢,所以我们在返回JSON前转回切片!
用到的方法如下:

type Rank struct {
	//用到json记得一定大写首字母
	UserId                string `json:"userId"`
	Solved_problem_number string `json:"solved_problem_number"`
	Solved_problem_score  string `json:"solved_problem_score"`
}

s := make([]Rank, 0)
for i := 0; i < cnt; i++{
	s = append(s, rank[i])
}
fmt.Println(s)
c.JSON(http.StatusOK, gin.H{
	"rank": s,
})

于是,我们便得到了JSON字符串的返回形式!
在这里插入图片描述
在这里插入图片描述
交互结果如下:
在这里插入图片描述
总结

  • 为什么不用gin.H呢?因为虽然保持了键值对,但是!未能返回数组,顺序也是map的无序性!
  • 为什么不一开始就用切片呢?因为前期需要用到结构体数组排序操作
  • 为什么最后需要转切片呢?因为切片大小是合理的!可以适应大小返回数据给前端
  • 在结构体的声明中用到 json:“xxx” 的时候,前面的变量名一定**大写!!!**后面的json就是我们返回数组是前面对应的键!
  • 返回JSON数组和JSON对象是不一样的!
  • 既然是返回数组形式即{ [ { },{ },{ },{ } ], xxx },那么不能如第一幅图中那样一项一项返回数组中的项!不然就是大括号接大括号,没有逗号分离,这种连续的JSON返回前端并不容易处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值