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);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot Thymeleaf模板文件调用Java类静态方法

    Springboot Thymeleaf模板文件调用Java类静态方法

    这篇文章主要介绍了Springboot Thymeleaf模板文件调用Java类静态方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2007-09-09
  • Java web开发中加载图片路径的两种方式

    Java web开发中加载图片路径的两种方式

    下文给大家介绍基于编译器idea以及tomcat服务器开发的,对Java web开发加载图片路径的两种方式感兴趣的朋友一起看看吧
    2017-07-07
  • Java 中的变量类型

    Java 中的变量类型

    这篇文章主要介绍了Java 中的变量类型,一般包括局部变量、成员变量、类变量,下面文章对这三种内容的变量做了一个详细介绍,需要的朋友可以参考一下
    2021-11-11
  • SpringBoot查看项目配置信息的几种常见方法

    SpringBoot查看项目配置信息的几种常见方法

    这篇文章主要为大家详细介绍了查看Spring Boot项目所有配置信息的几种方法,包括 Actuator端点,日志输出,代码级获取等方式并附带详细步骤和示例,希望对大家有一定的帮助
    2025-04-04
  • Java语言实现数据结构栈代码详解

    Java语言实现数据结构栈代码详解

    这篇文章主要介绍了Java语言实现数据结构栈代码详解,简单介绍了栈的概念,然后分享了线性栈和链式栈的Java代码,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 一文详解Java17中LinkedList类的用法和应用场景

    一文详解Java17中LinkedList类的用法和应用场景

    LinkedList 是 Java 集合框架中基于双向链表实现的类,实现了 List 和 Deque 接口,本文将为大家介绍一下它在Java 17 中如何更高效的使用吧
    2025-03-03
  • Java 堆内存溢出原因分析

    Java 堆内存溢出原因分析

    这篇文章主要介绍了Java 堆内存溢出原因分析,任何使用过基于 Java 的企业级后端应用的软件开发者都会遇到过这种报错,java.lang.OutOfMemoryError:Java heap space。,需要的朋友可以参考下
    2019-06-06
  • 浅谈SpringMVC+Spring3+Hibernate4开发环境搭建

    浅谈SpringMVC+Spring3+Hibernate4开发环境搭建

    MVC已经是现代Web开发中的一个很重要的部分,本文介绍一下SpringMVC+Spring3+Hibernate4的开发环境搭建,有兴趣的可以了解一下。
    2017-01-01
  • Java中从Integer到Date的转换方法

    Java中从Integer到Date的转换方法

    这篇文章主要介绍了Java中integer怎么转换date,在Java中,如果我们有一个Integer类型的数据,想要将其转换为Date类型,本文给大家介绍了实现方法,并通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-05-05
  • 详解Spring中使用@within与@target的区别

    详解Spring中使用@within与@target的区别

    这篇文章主要介绍了Spring中使用@within与@target的一些区别,本文通过项目案例给大家详细分析,给大家介绍的非常详细,代码简单易懂,需要的朋友可以参考下
    2021-09-09

最新评论