歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Map對象用JSON反序列化的方法

我們項目組的A系統依靠B系統寫入Redis中的數據對象工作。這個對象是一個Map對象,Map對象寫入Redis很簡單,先JSON化,然後Set入Redis即可。但是用JSON提供的反解析方法的時候,得到的是Map<String, JSONObject> 類型,而我希望得到的是Map<String, DDRouteRuleEntry>類型。也就是DDRouteRuleEntry類型並沒有被正確的解析。

只好順應這個結果進行反序列化,然後將每個JSONObject對象再次反序列化成DDRouteRuleEntry類型,也就是進行了N+1次反序列化工作。代碼如下:

@SuppressWarnings("unchecked")
 @Override
 public Map<String, DDRouteRuleEntry> readDDRouteMap() {
  try {
   String dDRouteMapJson = cacheServiceForServer.readDDRouteRuleMap();
   if (StringUtils.isNotBlank(dDRouteMapJson)) {
    Map<String, DDRouteRuleEntry> abtWaiterMap = new LinkedHashMap<String, DDRouteRuleEntry>();
    Map<String, JSONObject> tempMap = null;
   
    tempMap = JSON.parseObject(dDRouteMapJson, new LinkedHashMap<String, JSONObject>().getClass());
    if (tempMap != null) {
     for(String key : tempMap.keySet()){
      JSONObject str = tempMap.get(key);
      DDRouteRuleEntry ddRouteEntry = null;
     
      ddRouteEntry = JSON.parseObject(str.toJSONString(), DDRouteRuleEntry.class);
      abtWaiterMap.put(key, ddRouteEntry);
     }
    }
    return abtWaiterMap;
   }
  } catch (Exception ex) {
   LOG.error("reading and transferring DDRouteRuleMap json errors!");
   return new LinkedHashMap<String, DDRouteRuleEntry>();
  }
  return new LinkedHashMap<String, DDRouteRuleEntry>();
 }

我用的是阿裡巴巴的fastjson進行的序列化反序列化操作。總體感覺Map對象的反序列化工作很繁雜,除非是Map<String, String>()。即使LIst<T>裡的T是個很復雜的PO,反解析也僅需要一行代碼。為了這個問題耗了我快個把小時,我把我的解決辦法貼出來供大家參考。為了這個問題耗了我快個把小時如果你有更好的反序列化方法,歡迎回復,大家一起學習學習~

fastjson 的詳細介紹:請點這裡
fastjson 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved