将Bundle转换为JSON

时间:2014-02-18 15:42:30

标签: java android json android-intent

我想将Intent的extras Bundle转换为JSONObject,以便我可以将它传递给JavaScript。

是否有快速或最佳方式进行此转换?如果并非所有可能的Bundles都可以使用,那就没关系。

4 个答案:

答案 0 :(得分:50)

您可以使用Bundle#keySet()获取Bundle包含的键列表。然后,您可以遍历这些键并将每个键值对添加到JSONObject

JSONObject json = new JSONObject();
Set<String> keys = 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

修改

有人指出,以前的代码并没有很好地处理CollectionMap类型。如果您使用的是API 19或更高版本,那么JSONObject#wrap方法会对您有所帮助。来自docs

  

如有必要,包裹一个物体。如果对象为null,则返回NULL   宾语。如果是数组或集合,请将其包装在JSONArray中。如果它   是一个映射,将其包装在JSONObject中。如果是标准财产   (Double,String,et al)然后它已经被包裹了。否则,如果它   来自其中一个java包,把它变成一个字符串。如果它   没有,尝试将其包装在JSONObject中。如果包装失败,那么   返回null。

答案 1 :(得分:4)

NSOperation

答案 2 :(得分:3)

这是一个Gson类型的适配器工厂,它将Bundle转换为JSON。

https://github.com/google-gson/typeadapters/blob/master/android/src/main/java/BundleTypeAdapterFactory.java

答案 3 :(得分:0)

Object myJsonObj = bundleObject.get("yourKey");
JsonParser parser = new JsonParser();
JsonObject json = parser.parse(myJsonObj.toString()).getAsJsonObject();
json.get("memberInJson").getAsString();