MapオブジェクトをJSONで逆シーケンス化する方法
1783 ワード
我々のプロジェクトグループのAシステムはBシステムによってRedisに書き込まれたデータオブジェクトによって動作する.このオブジェクトはMapオブジェクトです.MapオブジェクトはRedisに書き込むのが簡単です.まずJSON化してから、SetをRedisに入ればいいです.しかしJSONで提供された逆解析法を用いた場合,得られるのはMapタイプであり,私が望んでいるのはMapタイプである.すなわちDDRouteRuleEntryタイプは正しく解析されていない.
この結果に順応して逆シーケンス化を行い,各JSONObjectオブジェクトをDDRouteRuleEntryタイプ,すなわちN+1回の逆シーケンス化を行った.コードは次のとおりです.
私はアリババのfastjsonが行ったシーケンス化逆シーケンス化操作を使っています.全体的には、Map()以外は、Mapオブジェクトの逆シーケンス化作業が煩雑であると感じられる.LIstのTが複雑なPOであっても,逆解析には1行のコードしか必要としない.この問題のために私はすぐに時間を費やして、私の解決方法を貼ってみんなの参考にします.この問題のために私は急いで時間を費やしました.もしあなたがもっと良い逆シーケンス化方法があれば、返事を歓迎して、みんなで勉強します.
この結果に順応して逆シーケンス化を行い,各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