Java中JSON格式反序列化为Map且保证存取顺序一致的问题
更新时间:2025年06月06日 15:26:41 作者:紫冰芊
这篇文章主要介绍了Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
背景
做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为com.alibaba.fastjson.JSONObject,再转化为JSONString,传给接收方,接收方将String转换为com.alibaba.fastjson.JSONObject,再反序列化为Map,且接收方需要保持存取顺序一致。
问题
- 不能将String转为JSONObject,再强转为LinkedMap,这样编译会报错;
- 也不能将String转为JSONArray,再一个一个赋值,组建成LinkedHashMap,还是无序的;
- 也不能在发送方发送对象的toString格式,在接收方将其转换为LinkedHashMap。
解决方法
(1)对于仅有一层对象数据内部没有其他对象或内部有其他对象但不需要保证内部其他对象的存取顺序一致。
//发送方这样存数据
JSONObject map=new JSONObject(true);//关键所在,要设置为true,否则会乱序
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
//发送方将map.toString()传给接收方
//接收方将从发送方获取的String转化为有序的LinkedHashMap
LinkedHashMap<String, String> root=JSON.parseObject(map.toString(), new TypeReference<LinkedHashMap<String, String>>(){});//关键所在,转化为有序的
(2)对于有多层对象数据,且需要保证内部其他对象的存取顺序一致。
//发送方定义多个JSONObject
JSONObject mapOut = new JSONObject(true);
for () {
JSONObject mapIn= new JSONObject(true);
mapIn.put("key1", "value1");
mapIn.put("key2", "value2");
mapOut.put("key3", mapIn);
}
//发送方将mapOut.toString()发送给接收方
//接收方将String转化为有序的LinkedHashMap且内部结构也有序
LinkedHashMap<String, Map<String, Object>> map = JSON.parseObject(mapOut.toString(), new TypeReference<LinkedHashMap<String, Map<String, Object>>>(){}, Feature.OrderedField);总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解
这篇文章主要介绍了Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
spring cloud gateway集成hystrix实战篇
这篇文章主要介绍了spring cloud gateway集成hystrix实战,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
spring-cloud入门之eureka-server(服务发现)
本篇文章主要介绍了spring-cloud入门之eureka-server(服务发现),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-01-01


最新评论