您可以使用Bundle#keySet()来获取Bundle包含的键列表。 然后,您可以遍历这些键并将每个键值对添加到JSONObject :
JSONObject json = new JSONObject(); Setkeys = bundle.keySet(); for (String key : keys) { try { // json.put(key, bundle.get(key)); see edit below json.put(key, JSONObject.wrap(bundle.get(key))); } catch(JSONException e) { //Handle exception here } }
请注意, JSONObject#put JSONException将要求您捕获JSONException 。
编辑:
有人指出,前面的代码没有很好地处理Collection和Maptypes。 如果你使用的是API 19或更高版本,那么有一个JSONObject#wrap方法,如果这对你很重要的话会有所帮助。 来自文档 :
如有必要,包裹一个物体。 如果对象为null,则返回NULL对象。 如果是数组或集合,请将其包装在JSONArray中。 如果是地图,请将其包装在JSONObject中。 如果它是标准属性(Double,String等),那么它已被包装。 否则,如果它来自其中一个java包,请将其转换为字符串。 如果没有,请尝试将其包装在JSONObject中。 如果包装失败,则返回null。
private String getJson(final Bundle bundle) { if (bundle == null) return null; JSONObject jsonObject = new JSONObject(); for (String key : bundle.keySet()) { Object obj = bundle.get(key); try { jsonObject.put(key, wrap(bundle.get(key))); } catch (JSONException e) { e.printStackTrace(); } } return jsonObject.toString(); } public static Object wrap(Object o) { if (o == null) { return JSONObject.NULL; } if (o instanceof JSONArray || o instanceof JSONObject) { return o; } if (o.equals(JSONObject.NULL)) { return o; } try { if (o instanceof Collection) { return new JSONArray((Collection) o); } else if (o.getClass().isArray()) { return toJSONArray(o); } if (o instanceof Map) { return new JSONObject((Map) o); } if (o instanceof Boolean || o instanceof Byte || o instanceof Character || o instanceof Double || o instanceof Float || o instanceof Integer || o instanceof Long || o instanceof Short || o instanceof String) { return o; } if (o.getClass().getPackage().getName().startsWith("java.")) { return o.toString(); } } catch (Exception ignored) { } return null; } public static JSONArray toJSONArray(Object array) throws JSONException { JSONArray result = new JSONArray(); if (!array.getClass().isArray()) { throw new JSONException("Not a primitive array: " + array.getClass()); } final int length = Array.getLength(array); for (int i = 0; i < length; ++i) { result.put(wrap(Array.get(array, i))); } return result; }
Object myJsonObj = bundleObject.get("yourKey"); JsonParser parser = new JsonParser(); JsonObject json = parser.parse(myJsonObj.toString()).getAsJsonObject(); json.get("memberInJson").getAsString();