将Bundle转换为JSON

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

有没有快速或最佳的方法来进行此转换?如果不是所有可能的捆绑包都能正常工作,那就没关系了。

回答:

您可以Bundle#keySet()用来获取捆绑软件包含的密钥列表。然后,您可以遍历这些键,并将每个键值对添加到中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对您很重要的方法将有所帮助。从文档:

如有必要,包装一个物体。如果对象为null,则返回NULL对象。如果它是数组或集合,则将其包装在JSONArray中。如果是地图,则将其包装在JSONObject中。如果它是标准属性(Double,String等),则它已经被包装。否则,如果它来自java软件包之一,则将其转换为字符串。如果没有,请尝试将其包装在JSONObject中。如果包装失败,则返回null。

以上是 将Bundle转换为JSON 的全部内容, 来源链接: utcz.com/qa/430582.html

回到顶部