package org.json; /** * Navigates several roles at once inside a JSON object hierarchy * @author JP Moresmau * */ public class JSONNavigator { public static Object opt(JSONObject obj,String ... path){ return optInternal(obj,0,path); } public static Object opt(JSONArray arr,String ... path){ return optInternal(arr,0,path); } private static Object optInternal(JSONObject obj,int ix,String ... path){ if (obj==null || path==null || ix>=path.length){ return null; } Object res=obj.opt(path[ix]); return optInternal(res,ix,path); } private static Object optInternal(JSONArray arr,int ix,String ... path){ if (arr==null || path==null || ix>=path.length){ return null; } String s=String.valueOf(path[ix]); if ("length".equals(s)){ return arr.length(); } Object res=arr.opt(Integer.parseInt(s)); return optInternal(res,ix,path); } private static Object optInternal(Object obj,int ix,String ... path){ ix++; if (ix>=path.length){ return obj; } else if (obj instanceof JSONObject){ return optInternal((JSONObject)obj,ix,path); } else if (obj instanceof JSONArray){ return optInternal((JSONArray)obj,ix,path); } return null; } }