当前位置: 代码网 > it编程>编程语言>Java > Java中JSON格式反序列化为Map且保证存取顺序一致的问题

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

2025年06月06日 Java 我要评论
背景做项目涉及两个微服务之间传数据时,需要提供方将map类型的数据序列化为com.alibaba.fastjson.jsonobject,再转化为jsonstring,传给接收方,接收方将string

背景

做项目涉及两个微服务之间传数据时,需要提供方将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);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com