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 压缩包并下载的教程详解

    这篇文章主要介绍了Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • IDEA SSM整合Redis项目实例 附源码

    IDEA SSM整合Redis项目实例 附源码

    今天给大家普及IDEA SSM整合Redis项目实例,包括pom.xml 配置和spring-redis.xml 配置代码,代码也很简单,通过项目实际案例能更好的帮助大家理解,需要的朋友可以参考下
    2021-06-06
  • spring cloud gateway集成hystrix实战篇

    spring cloud gateway集成hystrix实战篇

    这篇文章主要介绍了spring cloud gateway集成hystrix实战,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • spring-cloud入门之eureka-server(服务发现)

    spring-cloud入门之eureka-server(服务发现)

    本篇文章主要介绍了spring-cloud入门之eureka-server(服务发现),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 一文搞懂Java中的反射机制

    一文搞懂Java中的反射机制

    这篇文章主要介绍了Java中反射机制的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 使用Netty解决TCP粘包和拆包问题过程详解

    使用Netty解决TCP粘包和拆包问题过程详解

    这篇文章主要介绍了使用Netty解决TCP粘包和拆包问题过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Java并发编程之重入锁与读写锁

    Java并发编程之重入锁与读写锁

    这篇文章主要介绍了Java并发编程之重入锁与读写锁,文中相关实例代码详细,测试可用,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • MacOS如何安装配置多个JDK并切换使用详解

    MacOS如何安装配置多个JDK并切换使用详解

    这篇文章主要介绍了如何在MacOS上安装和配置多个JDK版本,通过配置环境变量来实现,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Hibernate实现悲观锁和乐观锁代码介绍

    Hibernate实现悲观锁和乐观锁代码介绍

    这篇文章主要介绍了Hibernate实现悲观锁和乐观锁的有关内容,涉及hibernate的隔离机制,以及实现悲观锁和乐观锁的代码实现,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot整合MyBatis-Plus的示例代码

    SpringBoot整合MyBatis-Plus的示例代码

    这篇文章主要介绍了SpringBoot整合MyBatis-Plus的示例代码,使用 MyBatis-Plus 可以减少大量的开发时间,单表的增删改查可以不用写 sql 语句,本文主要介绍整合需要主要事项,需要的朋友可以参考下
    2022-03-03

最新评论