记录一下有关Map转JSON的坑点

背景

最近需要做一个大屏统计的功能,两个图标分别按照一天内每个小时统计数量、一年内每个月统计数量,前端要求返回有序的JSON。

首先往缓存中存放的时这样的结构(HASH):


		"01": 0,
		"02": 0,
		"03": 0,
		"04": 0,
		"05": 0,
		"06": 0,
		"07": 0,
		"08": 0,
		"09": 0,
		"10": 0,
		"11": 0,
		"12": 0,
		"13": 0,
		"14": 0,
		"15": 0,
		"16": 0,
		"17": 0,
		"18": 0,
		"19": 0,
		"20": 0,
		"21": 0,
		"22": 0,
		"23": 0,
		"24": 0

后台代码取出的Map,不管是否有序都会使用TreeMap进行重新排序,最后返回前端的数据时这样:

{
    "viewingCharts": {
        "01": 0,
        "02": 0,
        "03": 0,
        "04": 0,
        "05": 0,
        "06": 0,
        "07": 0,
        "08": 0,
        "09": 0,
        "10": 0,
        "11": 0,
        "12": 0,
        "13": 0,
        "14": 0,
        "15": 0,
        "16": 0,
        "17": 0,
        "18": 0,
        "19": 0,
        "20": 0,
        "21": 0,
        "22": 0,
        "23": 0,
        "24": 0
    }
}

问题

返回的数据看着没有问题,但是使用接口软件调用,和使用浏览器控制台请求发现返回的值就会变成这样的:

{
	"viewingCharts": {
		"10": 0,
		"11": 0,
		"12": 0,
		"13": 0,
		"14": 0,
		"15": 0,
		"16": 0,
		"17": 0,
		"18": 0,
		"19": 0,
		"20": 0,
		"21": 0,
		"22": 0,
		"23": 0,
		"24": 0,
		"01": 0,
		"02": 0,
		"03": 0,
		"04": 0,
		"05": 0,
		"06": 0,
		"07": 0,
		"08": 0,
		"09": 0
	}
}

坑点

一、接口软件自动美化JSON

即使返回结果是正常的有序的,但是经过部分软件格式化之后有可能顺序重新排列,如果可以尽量看原生的返回结果,比如这样:

错误的结果,默认美化。。。

image-20210726155606280

正确的返回结果:可以看到实际返回的是有序的

image-20210726155719271

再来看一下百度一些格式化网站的结果:

image-20210726161114473

二、将个位数像01、02等的小key换成像1、2的格式,无论如何美化都是按照原样输出

原生:

image-20210726164131717

美化后的:

image-20210726163929903

再来看一下百度一些格式化网站的结果:

image-20210726163205324

尾言

挺奇葩的,本来看这个半天摸不着头脑,为啥到返回过来就变了,直到让同事试了试,结果他返回的数据是按照正常顺序输出的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中的Map是一种非常方便的数据结构,它可以存储键值对,这些键值对可以根据需要添加、删除或修改。而JSON是一种轻量级的数据交换格式,它被广泛用于跨平台和跨语言的数据传输。Map换为JSON是开发过程中常用的操作之一,下面简单介绍一下如何实现Map换为JSON。 在Java中,我们可以使用第三方库Gson或者Jackson来实现Map换为JSON。其中,Gson是Google提供的开源类库,它提供了fromJson、toJson、toJsonTree等方法,可以将Java对象换为JSON格式的字符串或解析JSON格式的字符串并生成Java对象。Jackson是另一个非常优秀的Java序列化框架,它也提供了将Java对象换为JSON格式的方法,并提供了很多高级特性,如对JSON数据中的日期格式、NULL值、枚举类型等的处理。 下面给出一个使用Gson进行Map换为JSON的例子: ``` Map<String, Object> map = new HashMap<>(); map.put("name", "Tom"); map.put("age", 20); String jsonStr = new Gson().toJson(map); ``` 在上面的代码中,我们首先创建了一个Map对象,并向其中添加了一些键值对。然后使用Gson的toJson方法将Map对象换为JSON格式的字符串。这个jsonStr字符串的结果是: ``` {"age":20,"name":"Tom"} ``` 如果使用Jackson进行Map换为JSON,可以使用如下代码: ``` Map<String, Object> map = new HashMap<>(); map.put("name", "Tom"); map.put("age", 20); String jsonStr = new ObjectMapper().writeValueAsString(map); ``` 在上面的代码中,我们使用了Jackson中的ObjectMapper类,并调用其writeValueAsString方法将Map对象换为JSON格式的字符串。这个jsonStr字符串的结果与使用Gson换的结果相同。 综上所述,无论你选择使用Gson还是Jackson,Map换为JSON都非常方便。通过简短的代码就可以将Java程序中的Map对象换为可用于网络传输的JSON格式数据。在实际开发中,我们可以选择适合自己的方法和工具来完成Map换为JSON的操作,提高我们的开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

听风听雨听世界

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值