package org.everit.json.schema.loader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; /** * Utility class simplifying working with org.json.JSONObject and JSONArray in a way that it also works * on android. */ public class OrgJsonUtil { /** * Used as a replacement of {@code JSONObject#toMap()} (which doesn't exist in the android version of org.json). */ public static Map<String, Object> toMap(JSONObject obj) { Map<String, Object> rval = new HashMap<>(obj.length()); Iterator<String> keyIt = obj.keys(); while (keyIt.hasNext()) { String key = keyIt.next(); Object rawValue = obj.get(key); Object convertedValue = convertValue(rawValue); rval.put(key, convertedValue); } return rval; } static Object convertValue(Object rawValue) { Object convertedValue; if (rawValue instanceof JSONObject) { convertedValue = toMap((JSONObject) rawValue); } else if (rawValue instanceof JSONArray) { convertedValue = toList((JSONArray) rawValue); } else { convertedValue = rawValue; } return convertedValue; } /** * Used as a replacement of {@code JSONArray#toList()} (which doesn't exist in the android version of org.json). */ public static List<Object> toList(JSONArray arr) { List<Object> rval = new ArrayList<>(arr.length()); for (int i = 0; i < arr.length(); ++i) { rval.add(convertValue(arr.get(i))); } return rval; } public static String[] getNames(JSONObject obj) { if (obj == null || obj.length() == 0) { return null; } String[] rval = new String[obj.length()]; Iterator<String> keyIt = obj.keys(); int idx = 0; while (keyIt.hasNext()) { String key = keyIt.next(); rval[idx++] = key; } return rval; } private OrgJsonUtil() { } }