Convert JSON to Android Bundle [closed] Convert JSON to Android Bundle [closed] json json

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("{...}");