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


title: 记录一下有关Map转JSON的坑点
copyright: true
date: 2021-07-26 15:25:53
tags:
categories:
cover:
description: 记录一下有关开发中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

尾言

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

推荐阅读更多精彩内容

  • 前言 因为需要搞定项目中大大小小所有坑,所以总是有些东西需要记录下来方便备查。另外就是原先没有记录下来的点,搞清楚...
    本然酋长阅读 159评论 0 3
  • 适宜阅读人群 1、待面试的 初/中/高级 Java 程序员 2、查漏补缺的人 3、想要不断完善和扩充自己 Java...
    安冬尼阅读 4,417评论 1 33
  • $HTML, HTTP,web综合问题 1、前端需要注意哪些SEO 2、 的title和alt有什么区别 3、HT...
    Hebborn_hb阅读 4,028评论 0 20
  • 技术点: 不定期更新补充 页面引用svg symbol标签创建icon p:nth-child(2) 与 p:nt...
    wwmin_阅读 908评论 0 51
  • 董多娇第226天坚持分享,焦点相信,每个人在每一刻都会为自己做出一个决定与选择,是他们当时认为最合适自己的,所以任...
    良知良能良知良能阅读 1,827评论 1 1
  • 一、jQuery简介 JQ是JS的一个优秀的库,大型开发必备。在此,我想说的是,JQ里面很多函数使用和JS类似,所...
    Welkin_qing阅读 3,553评论 0 1
  • 跑马灯在项目了其实应用的还比较多,特别是做多媒体的时候,音乐视频蓝牙等等经常用到。 比如音乐的专辑信息,蓝牙通话记...
    江南皮皮阅读 2,181评论 1 6
  • 找一个地方,不被人际关系网淹没,不被窒息的生活压力裹挟,忘记钱财之物,日出而作,日落而息。繁华的都市不适合,人情往...
    不会爱的草鱼阅读 755评论 1 0