Convert JSON to Android Bundle [closed]
public static Bundle jsonStringToBundle(String jsonString){ try { JSONObject jsonObject = toJsonObject(jsonString); return jsonToBundle(jsonObject); } catch (JSONException ignored) { } return null;}public static JSONObject toJsonObject(String jsonString) throws JSONException { return new JSONObject(jsonString);}public static Bundle jsonToBundle(JSONObject jsonObject) throws JSONException { Bundle bundle = new Bundle(); Iterator iter = jsonObject.keys(); while(iter.hasNext()){ String key = (String)iter.next(); String value = jsonObject.getString(key); bundle.putString(key,value); } return bundle;}
This is late, but maybe it helps someone finding this thread:
/** Convert a JSON object to a Bundle that can be passed as the extras of * an Intent. It passes each number as a double, and everything else as a * String, arrays of those two are also supported. */ public static Bundle fromJson(JSONObject s) { Bundle bundle = new Bundle(); for (Iterator<String> it = s.keys(); it.hasNext(); ) { String key = it.next(); JSONArray arr = s.optJSONArray(key); Double num = s.optDouble(key); String str = s.optString(key); if (arr != null && arr.length() <= 0) bundle.putStringArray(key, new String[]{}); else if (arr != null && !Double.isNaN(arr.optDouble(0))) { double[] newarr = new double[arr.length()]; for (int i=0; i<arr.length(); i++) newarr[i] = arr.optDouble(i); bundle.putDoubleArray(key, newarr); } else if (arr != null && arr.optString(0) != null) { String[] newarr = new String[arr.length()]; for (int i=0; i<arr.length(); i++) newarr[i] = arr.optString(i); bundle.putStringArray(key, newarr); } else if (!num.isNaN()) bundle.putDouble(key, num); else if (str != null) bundle.putString(key, str); else System.err.println("unable to transform json to bundle " + key); } return bundle; }
jaffa's answer is good, but it only works for depth=1 JSON objects. I improved on it by adding support for nested objects.
private static Bundle jsonStringToBundle(String jsonString) { try { JSONObject jsonObject = new JSONObject(jsonString); return jsonToBundle(jsonObject); } catch (JSONException ignored) {} return null;}private static Bundle jsonToBundle(JSONObject jsonObject) throws JSONException { Bundle bundle = new Bundle(); Iterator iter = jsonObject.keys(); while (iter.hasNext()) { String key = (String)iter.next(); String value = jsonObject.getString(key); Bundle bundleVal = jsonStringToBundle(value); if (bundleVal != null) { bundle.putBundle(key, bundleVal); } else { bundle.putString(key, value); } } return bundle;}
Usage:
Bundle bundle = jsonStringToBundle("{...}");