2012-10-29 72 views
15

我有一个响应从服务器回来,我期待一个字符串值,所以我写了这个解析它JSON.getString没有返回null

public String getMessageFromServer(JSONObject response) { 
    String msg = response.getString("message"); 
    return msg; 
} 

然后,当我使用这在我代码并从服务器获取null值,该函数不会返回null,而是返回"null"

我看过this bug report,但我没有看到解决方案。

编辑:

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

public String getMessageFromServer(JSONObject response) { 
    Object msg = response.get("message"); 
    if(msg == null) { 
     return null; 
    } 
    return (String) msg; 
}  
+1

这看起来挺合我意。 – 2012-10-29 08:35:10

+1

这是可以的,但这是一个丑陋的黑客,我不喜欢它 – thepoosh

+1

为什么这个丑陋或黑客?你只是做得很好 –

回答

16

的黑客攻击你的情况看起来还好。

另一种选择是使用方法boolean isNull(String key),然后基于返回的布尔值继续您的选项。喜欢的东西:

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

不过,我不认为有多少你的当前实现,这之间的差别。

+2

+1用于指出检查空值的正确方法。但是当你说没有太大的区别时,我不同意。 isNUll-call更清晰,应该更倾向于依赖Object和cast。 – EinLama

+0

你不能删除'response.has(“message)”'check?只要该键不存在,'isNull'将返回true,所以'getString'不会被调用,并且不会抛出异常。 –

0

也是一种可能性,

public String getMessageFromServer(JSONObject response) { 
    String msg = response.getString("message", null); 
    if(msg == null) { 
     return null; 
    } 

    return msg; 
}  
+0

大声笑,你的IDE或编译器没有警告你整个if语句是无用的吗?如果'msg'为null,则只需在'getMessageFromServer'方法内返回'msg'本身。 –