是否可以使用JSONLib从getString获取null

时间:2011-04-08 12:23:33

标签: java json

我正在使用JSON-lib来解析一个对象并从中读取一个字符串。这适用于有效的字符串,但也可以为null。例如:

JSONObject jsonObject = JSONObject.fromObject("{\"foo\":null}");
String str = jsonObject.getString("foo");

在这种情况下,我希望strnull,而是"null"。调用任何其他方法似乎都会引发错误。无论如何,如果值是字符串,JSONLib会解析字符串,但如果值为null,则返回null吗?

4 个答案:

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

这是一个已报告的JSONLib错误。

https://github.com/douglascrockford/JSON-java/issues/5

将jsonlib升级到最新版本可能会解决它。

答案 3 :(得分:0)

为什么不使用 JSONObject::opt?如果键不存在,您将得到一个空值(不是“空值”)。

String str = (String) jsonObject.opt("foo");