Golang map如何生成有序的json数据详解
前言
本文主要给大家介绍了关于Golangmap生成有序json数据的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:
先来看一段Golang生成json的代码,首先定义了一个map[string]interface{} 的变量,然后存一些值,这里要注意的是previews字段,为了浏览器获取到的json数据是有序的,所以定义了一个map[int]map[string]string的类型,加上了一个表示顺序的键:
list:=make(map[string]interface{})
list["id"]=detail["id"]
list["game_name"]=detail["game_name"]
list["game_logo"]=detail["game_m_logo"]
gameTags,_:=utils.InterfaceToStr(detail["game_tags"])
list["game_tags"]=strings.Split(gameTags,",")
list["game_desc"]=detail["game_long_desc"]
list["play_total_times"]=33333
testImages:=make(map[int]map[string]string)
testImages[1]=map[string]string{"video":"xxx"}
testImages[2]=map[string]string{"image":"yyy1"}
testImages[3]=map[string]string{"image":"yyy2"}
testImages[5]=map[string]string{"image":"yyy5"}
testImages[4]=map[string]string{"image":"yyy3"}
list["previews"]=testImages
fmt.Println("testlist:",list)
但实际上,对于Golang来说,previews字段并非因此就变成是有序的,通过打印就可以知道了,但是浏览器会自动对带有int型主键的json数据进行排序,从而实现了目的。
生成的json格式数据如下,按照int从小到大排列了:
{
"data":{
"game_desc":"从秀才一路前进,你最终能官居几品?为了完成父亲的遗愿,你走上了这条漫漫升官路。最终你会成为什么样的人?",
"game_logo":"http://image.egret.com/game/gameIcon/181/90681/icon_200.jpg?1472698847",
"game_name":"官居几品",
"game_tags":[
"呵呵"
],
"id":"3",
"play_total_times":33333,
"previews":{
"1":{
"video":"xxx"
},
"2":{
"image":"yyy1"
},
"3":{
"image":"yyy2"
},
"4":{
"image":"yyy3"
},
"5":{
"image":"yyy5"
}
}
},
"msg":"ok",
"result":0
}
这样的话有个缺点,本来可以输出更为简洁的数据结构,但因为map的无序不得不加一个主键,让前端解析增加了麻烦。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用Go语言能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。