将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
。
有人指出,以前的代码不能很好地处理Collection
和Map
键入。如果您使用的是API
19或更高版本,那么有一种JSONObject#wrap
对您很重要的方法将有所帮助。从文档:
如有必要,包装一个物体。如果对象为null,则返回NULL对象。如果它是数组或集合,则将其包装在JSONArray中。如果是地图,则将其包装在JSONObject中。如果它是标准属性(Double,String等),则它已经被包装。否则,如果它来自java软件包之一,则将其转换为字符串。如果没有,请尝试将其包装在JSONObject中。如果包装失败,则返回null。
以上是 将Bundle转换为JSON 的全部内容, 来源链接: utcz.com/qa/430582.html