检查JSON节点是否为空。

3

我从一个api返回一些JSON数据,根对象的其中一个子节点是 item

我想检查这个节点上的值是否为null。以下是我的尝试,当节点实际上为空时,它会抛出一个 JSONException 异常:

if (response.getJSONObject("item") != null) {

// do some things with the item node

} else {

// do something else

}

日志记录器

07-22 19:26:00.500: W/System.err(1237): org.json.JSONException: Value null at item of type org.json.JSONObject$1 cannot be converted to JSONObject

请注意,此处的item节点不仅是一个字符串值,而是一个子对象。谢谢!
4个回答

8

要对JsonNode字段进行适当的空指针检查:

JsonNode jsonNode = response.get("item");

if(jsonNode == null || jsonNode.isNull()) { }

该项在响应中可能不存在,或者明确设置为null。


7

好的,如果节点始终存在,您可以使用.isNull()方法检查是否为null。

if (!response.isNull("item")) {

// do some things with the item node

} else {

// do something else

}

这是正确的答案。我希望他们从未包含has()方法。 - Sky Kelsey
方法 has("tag") 在某些情况下非常重要,例如由于某种原因未返回期望的“tag”(来自RestFull请求),通过使用该方法,我们可以避免异常!!! - Anderson K

1
我假设你的响应来自httpClient,对吗?如果是这样,你可以检查它的长度。
HttpResponse response = httpclient.execute(httppost);
String responseBody = EntityUtils.toString(response.getEntity());

String.valueOf(responseBody.length())

如果您得到的任何东西都应该大于0,我想 :)

-2

首先,您可以使用方法has("")检查键是否存在;

if(response.has("item")) {

    if (response.getJSONObject("item") != null) {

        // do some things with the item node

    } else {

        // do something else

    }
}

很抱歉,这样做不行,因为响应总是返回“item”节点,但有时它看起来像这样"item":null。因此,它将绕过第一个if语句,然后在第二个if语句中抛出异常。 - settheline
如果您没有执行response.getJSONObject("Item")调用,并且键“item”不存在,将会抛出异常! - Anderson K
抱歉,我不理解你上一条评论的意思。在Json对象中,关键字“item”将始终存在。只是这个值是真实数据还是“null”的问题。 - settheline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接