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

2 篇文章 0 订阅
  • 背景:做项目涉及两个微服务之间传数据时,需要提供方将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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值