MapオブジェクトをJSONで逆シーケンス化する方法

1783 ワード

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