我必须做这样的事情:
JSONObject obj;
Iterator keys = obj.keys();
while(keys.hasNext()){
String key = keys.next();
if(obj.get(key) instanceof JSONOBject){
//do something
}
else if(obj.get(key) instanceof JSONArray){
//do something else
} else {
//do something even different
}
}
我想用更好的东西来重构这个,如果没有instanceof,那么就如此。也许使用流和选项,但我还没有找到一个很好的方法来使用它们与JSONObjects。任何提示?
答案 0 :(得分:2)
您可以创建一个Select A.ID
,B.*
From YourTable A
Cross Apply ( values ('Home' ,HOME_APPDTE1 ,HOMENUMBER1 ,1)
,('Home' ,HOME_APPDTE2 ,HOMENUMBER2 ,2)
,('Home' ,HOME_APPDTE3 ,HOMENUMBER3 ,3)
,('Work' ,WORK_APPDTE1 ,WORKNUMBER1 ,1)
,('Work' ,WORK_APPDTE2 ,WORKNUMBER2 ,2)
,('Work' ,WORK_APPDTE3 ,WORKNUMBER2 ,3)
,('Mobile',MOBILE_APPDTE1,MOBILENUMBER1,1)
,('Mobile',MOBILE_APPDTE2,MOBILENUMBER2,2)
,('Mobile',MOBILE_APPDTE3,MOBILENUMBER3,3)
) B ([Type],[DateChanged],[Tel_Number],[Rank])
类,将类映射到您要应用的操作(示例代码位于底部以供参考)。然后您可以简单地填充操作:
ActionMap
并在循环中使用地图:
ActionMap m = new ActionMap();
m.put(JSONOBject.class, o -> System.out.println("JSONObject: " + o));
m.put(JSONArray.class, o -> System.out.println("JSONArray: " + o));
//etc.
while(keys.hasNext()){
String key = keys.next();
Object o = obj.get(key);
if (m.containsMapping(o)) m.apply(o);
else //deal with missing class mapping
}
类的简化实现:
ActionMap