我想将Intent的extras Bundle转换为JSONObject,以便我可以将它传递给JavaScript。
是否有快速或最佳方式进行此转换?如果并非所有可能的Bundles都可以使用,那就没关系。
答案 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
。
修改强>
有人指出,以前的代码并没有很好地处理Collection
和Map
类型。如果您使用的是API 19或更高版本,那么JSONObject#wrap
方法会对您有所帮助。来自docs:
如有必要,包裹一个物体。如果对象为null,则返回NULL 宾语。如果是数组或集合,请将其包装在JSONArray中。如果它 是一个映射,将其包装在JSONObject中。如果是标准财产 (Double,String,et al)然后它已经被包裹了。否则,如果它 来自其中一个java包,把它变成一个字符串。如果它 没有,尝试将其包装在JSONObject中。如果包装失败,那么 返回null。
答案 1 :(得分:4)
NSOperation
答案 2 :(得分:3)
这是一个Gson类型的适配器工厂,它将Bundle转换为JSON。
答案 3 :(得分:0)
Object myJsonObj = bundleObject.get("yourKey");
JsonParser parser = new JsonParser();
JsonObject json = parser.parse(myJsonObj.toString()).getAsJsonObject();
json.get("memberInJson").getAsString();