springmvc 返回 json 里面的 map 顺序反掉了

2019-05-21 11:45:48 +08:00
 fdgdbr

这是返回之前的对象 https://i.loli.net/2019/05/21/5ce37374e9edc63235.png 这是返回之后 postman 里面数据 https://i.loli.net/2019/05/21/5ce3737b9cb9e16987.png 即使用了 treemap 还是不行,请大佬指教 用的框架是 springboot,版本 2.1.4

6037 次点击
所在节点    Java
30 条回复
fdgdbr
2019-05-21 11:46:58 +08:00
奇怪的是这个 2018 和 2019 里面还是个 map,但是里面的 map 顺序是对的
kimchan
2019-05-21 11:55:00 +08:00
python 的 map 是无序的. 不是 java 是不是也是因为这个原因
fireye
2019-05-21 12:02:07 +08:00
前端重排序或者 [{},...]
zvcs
2019-05-21 12:06:29 +08:00
map 不保证顺序。保证顺序要用 linkhashmap
wz74666291
2019-05-21 12:06:48 +08:00
是不是应该用 linkedHashMap 而不是 treeMap 呀
fhsan
2019-05-21 12:13:18 +08:00
返回给前端转换成数组,前端大部分情况下 Map 都不支持有序。
Aruforce
2019-05-21 12:14:16 +08:00
@zvcs 第一张图片里面就是 linkedhashmap 啊。。
估计是 postman 自己的问题...
geelaw
2019-05-21 12:16:04 +08:00
map 通常没有保持原来 key 顺序的功能。你不应该依赖 JSON 对象里面 key 的顺序,先写后写都是相等的对象。
iyaozhen
2019-05-21 12:18:10 +08:00
一个 map 什么场景需要顺序呢?
reus
2019-05-21 12:23:21 +08:00
这不叫问题,这叫特性

json 的对象型数据,键就是无序的

如果想有序,请用数组

不要想着“解决”这个“问题”,应该修改你的程序,让它不依赖这个顺序
micean
2019-05-21 12:24:21 +08:00
treemap 有啥用……
你的 spring 配置的是 jackson 吗?直接在项目里 autowire objectmapper,把结果打印出来比对一下是不是序列化的锅就知道了
Citrus
2019-05-21 12:24:59 +08:00
Json 的 Map 本身也是无序的吧,印象中一般的库都不保证顺序的
micean
2019-05-21 12:26:56 +08:00
检查下 SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS 这个配置是不是 false
johnniang
2019-05-21 12:41:59 +08:00
你可能需要一个 SortedMap
lululau
2019-05-21 12:45:27 +08:00
JSON 中没有 Map 这种数据结构,如果你指的是 object 的话,JSON 定义的 object 的键值对是无序的, http://json.org
watzds
2019-05-21 13:10:55 +08:00
有些时候找到的办法,要想想你的方法是不是完全错了,前提就不对
watzds
2019-05-21 13:11:21 +08:00
@watzds 有些时候找不到办法,要想想你的方法是不是完全错了,前提就不对
HuHui
2019-05-21 13:13:24 +08:00
前段排就完事儿了,别纠结
beidounanxizi
2019-05-21 13:15:12 +08:00
序列化组件没配置的原因吧,大哥你就这么想,拼接成字符串,你要是写个序列化的 json 组件你怎么写?
br00k
2019-05-21 15:45:05 +08:00
Map 顺序无法保证的。就算你返回的有序,但是客户端处理成字典或对象以后,并不一定会按照你的顺序来。有序还是用 List。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/566151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX