我正在使用JSON-lib来解析一个对象并从中读取一个字符串。这适用于有效的字符串,但也可以为null。例如:
JSONObject jsonObject = JSONObject.fromObject("{\"foo\":null}");
String str = jsonObject.getString("foo");
在这种情况下,我希望str
为null
,而是"null"
。调用任何其他方法似乎都会引发错误。无论如何,如果值是字符串,JSONLib会解析字符串,但如果值为null,则返回null吗?
答案 0 :(得分:3)
JSONObject.java:
/**
* Get the string associated with a key.
*
* @param key A key string.
* @return A string which is the value.
* @throws JSONException if the key is not found.
*/
public String getString( String key ) {
verifyIsNull();
Object o = get( key );
if( o != null ){
return o.toString();
}
throw new JSONException( "JSONObject[" + JSONUtils.quote( key ) + "] not found." );
}
你可以看到getString()永远不会返回null。如果o.toString()这样做,它可以返回“null”,但这将是String not null value
答案 1 :(得分:1)
我找不到一个很好的方法来做到这一点,所以我切换到了Jackson。这允许我这样做:
JsonNode json = (new ObjectMapper()).readValue("{\"foo\":null}", JsonNode.class);
json.get("stopType").getTextValue();
对于此示例,将按预期返回null
。
答案 2 :(得分:1)
答案 3 :(得分:0)
为什么不使用 JSONObject::opt?如果键不存在,您将得到一个空值(不是“空值”)。
String str = (String) jsonObject.opt("foo");