Golang map如何生成有序的json数据详解

 更新时间:2017年07月28日 08:24:01   作者:小谈  
最近在学习Golang,发现了一个问题,觉着有必要给大家总结下,下面这篇文章主要给大家介绍了关于Golang map如何生成有序json数据的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。

前言

本文主要给大家介绍了关于Golang map生成有序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("test list:", 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语言能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Golang基于泛化调用与Nacos实现Dubbo代理

    Golang基于泛化调用与Nacos实现Dubbo代理

    这篇文章主要为大家详细介绍了Golang如何基于泛化调用与Nacos实现Dubbo代理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • Golang实现for循环运行超时后自动退出的方法

    Golang实现for循环运行超时后自动退出的方法

    for循环对大家来说应该都不陌生,对于golang来说更是必不可少,所以下面这篇文章就来给大家介绍了关于Golang如何实现for循环运行一段时间超时后自动退出的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • Go 1.21新内置函数min、max和clear的用法详解

    Go 1.21新内置函数min、max和clear的用法详解

    Go 1.21 版本已经正式发布,它带来了许多新特性和改进,其中引入了的三个新内置函数:max、min 和 clear,接下来我们就来看看这些函数的用途和特点吧
    2023-08-08
  • golang批量执行任务的通用模板分享

    golang批量执行任务的通用模板分享

    这篇文章主要为大家详细介绍了golang实现批量执行任务的通用模板,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-11-11
  • Go基础教程系列之defer、panic和recover详解

    Go基础教程系列之defer、panic和recover详解

    这篇文章主要介绍了Go基础教程系列之defer、panic和recover,需要的朋友可以参考下
    2022-04-04
  • go语言中struct标签详解

    go语言中struct标签详解

    这篇文章主要给大家介绍了关于go语言中struct标签的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用go语言具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • 通过函数如何将golang float64 保留2位小数(方法汇总)

    通过函数如何将golang float64 保留2位小数(方法汇总)

    这篇文章主要介绍了通过函数将golang float64保留2位小数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • golang高并发系统限流策略漏桶和令牌桶算法源码剖析

    golang高并发系统限流策略漏桶和令牌桶算法源码剖析

    这篇文章主要介绍了golang高并发系统限流策略漏桶和令牌桶算法源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言里的结构体文法实例分析

    Go语言里的结构体文法实例分析

    这篇文章主要介绍了Go语言里的结构体文法,实例分析了结构体文法的概念及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • go原生库的中bytes.Buffer用法

    go原生库的中bytes.Buffer用法

    这篇文章主要介绍了go原生库的中bytes.Buffer用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论