如何使用Java处理JSON响应中的可选键

时间:2017-11-02 18:32:33

标签: java json

"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可以帮助解决这个问题吗?

1 个答案:

答案 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)