"app":{
"icon":{
"icon":"TOP_RATED"
},
"message":{
"_type":"TextSpan",
"text":"Top Rated"
}
}
我继续在其中一个继承的项目中看到以下代码。上面的JSON响应解析如下
// itemObject has the entire json response
// appObject is a POJO with icon, type fields
String icon= JsonPath.with(itemObject).getAsString("icon/icon");
appObject.setIcon(icon);
String type = "";
try {
type = JsonPath.with(itemObject).getAsString("message/_type");
catch(IllegalArgumentException e) {
// do nothing if type is not found in response
} finally {
// set type to empty string if it's not found
appObject.setType(type);
}
在这种情况下,当特定应用程序不存在_type时,最好用try / catch块包围它,如上所示?使用try / catch / finally块来处理业务逻辑而不是错误处理似乎是错误的。有什么更好的方法可以做到这一点,Java 8 Optional可以帮助解决这个问题吗?
答案 0 :(得分:1)
我发现org.json
包简单明了。它被发现here。例如,org.json.JSONObject
类包含public boolean has(String key)
方法,该方法用于检查某个密钥是否存在。
如果此对象具有name的映射,则返回true。映射可能为NULL。
你可以通过这种方式检查“我是谁”。 - 如果此对象具有name的映射,则返回true。映射可能为NULL。
if (json.has("status")) {
String status = json.getString("status"));
}
if (json.has("club")) {
String club = json.getString("club"));
}
您还可以使用' isNull'进行检查。 - 如果此对象没有,则返回true 映射名称或者它是否具有值为NULL的映射。
if (!json.isNull("club"))
String club = json.getString("club"));
http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)