JSON.getString不返回null

the*_*osh 20 java json org.json

我有一个从服务器返回的响应,我期待一个String值,所以我写这个来解析它

public String getMessageFromServer(JSONObject response) {
    String msg = response.getString("message");
    return msg;
}
Run Code Online (Sandbox Code Playgroud)

然后,当我在我的代码中使用它并null从服务器获取值时,函数不返回null,而是返回"null".

我看过这个错误报告,但我没有看到解决方案.

编辑:

我有一个很小的黑客来解决这个问题,但它很难看,我正在寻找一个更好的解决方案:

public String getMessageFromServer(JSONObject response) {
    Object msg = response.get("message");
    if(msg == null) {
         return null;
    }
    return (String) msg;
}    
Run Code Online (Sandbox Code Playgroud)

编辑#2:

多年以后,回到这个问题,我看到我在这里并没有完全错误,并且JSONObject有一个内置的方法.

从a获取可选值的方法JSONObject是使用此方法 JSONObject.optString("message", DEF_VALUE);

Suj*_*jay 21

黑客看起来对你的情况没问题.

另一种选择是使用该方法boolean isNull(String key),然后根据返回的布尔值继续您的选项.就像是:

public String getMessageFromServer(JSONObject response) {
    return ((response.has("message") && !response.isNull("message"))) ? response.getString("message") : null;
} 
Run Code Online (Sandbox Code Playgroud)

但是,我认为您当前的实施与此之间没有太大区别.

  • +1用于指出检查空值的正确方法.但是当你说没有太大区别时,我不同意.isNUll调用更干净,应该优先依赖于Object和强制转换. (2认同)