Вот некоторые вспомогательные методы, которые могут помочь вещам казаться чище и более читабельными:
@SuppressWarnings("unchecked")
public static Map<String, Object> getMap(Map<String, Object> map, String key) {
return (Map<String, Object>)map.get(key);
}
@SuppressWarnings("unchecked")
public static String getString(Map<String, Object> map, String key) {
return (String)map.get(key);
}
@SuppressWarnings("unchecked")
public static Integer geInteger(Map<String, Object> map, String key) {
return (Integer)map.get(key);
}
// you can add more methods for Date, Long, and any other types you know you'll get
Но вам придется вложить вызовы:
String attrValue = getString(getMap(getMap(map, id1), id2), attrName);
Или, если вы хотите что-то более прикольное, добавьте вышеуказанные методы в качестве методов экземпляра к карте impl:
public class FunkyMap extends HashMap<String, Object> {
@SuppressWarnings("unchecked")
public FunkyMap getNode(String key) {
return (FunkyMap)get(key);
}
@SuppressWarnings("unchecked")
public String getString(String key) {
return (String)get(key);
}
@SuppressWarnings("unchecked")
public Integer geInteger(String key) {
return (Integer)get(key);
}
// you can add more methods for Date, Long, and any other types you know you'll get
}
Десериализовать в этот класс с вашей библиотекой json (вам, вероятно, придется предоставить ее).с фабричным методом для класса карты (), тогда вы можете цепочка вызовы более естественно:
String attrValue = map.getNode(id1).getNode(id2).getString(attrName);
Прикольный вариант - это то, что я сделал для компании, и он работаллечить :)