如何检查JSONArray元素是否为空。

15

我弄不清如何确定位于JSON数组中的元素是否为null。要检查jsonObject本身是否为null,只需使用:

jsonObject.isNullObject();

但是当对象是一个数组且我想检查该数组中的某个元素是否为null时,以下代码不起作用:

jsonArray.get(i).get("valueThatIsNull") == null;

数组元素上也没有isNull方法。如何检查jsonarray中的值是否为null?可能有助于了解我是从javascript传递一个null对象。也许当从JSON格式的Javascript传递变量到Java时,null表示的含义不同,但我尝试了在null周围加括号,它仍然不起作用。

我发布一些实际源代码以帮助更好地理解。jsonObject是jsonArray的一部分,因为它本身是一个对象,所以该对象具有多个值。

JSONObject mapItem = jsonArray.getJSONObject(i);
int id = mapItem.has("id") ? mapItem.getInt("id") : -1;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
Date sqlDate = null;
if(mapItem.has("date")) {
    String dateStr = mapItem.getString("date");
    if(!dateStr.equals("null")) {
    date = dateFormat.parse(mapItem.getString("date").substring(0, 10)); //Convert javascript date string to java.
    sqlDate = new Date(date.getTime());
}
3个回答

21

尝试使用.isNull()

对于您的示例:

if(!mapItem.isNull("date")) {
    //Value is not null
}

然而,要回答这个问题的标题,“如何判断一个JSONArray元素是否为null”,可以使用.equals()

因此,要检查索引1是否为null:

if (!jsonArray.get(1).equals(null)) {
    //jsonArray[1] is not null
}

15

我猜测json将null值作为字符串传递,因此您无法将其视为Java元素来检查null。相反,将null值视为字符串并通过以下方式进行检查:

if(!mapItem.getString("date").equals("null")) {
    //Value is not null
}

我已经更新了原始问题中的代码片段,使其可正常工作。


3
尝试使用JSONArray的方法。
public boolean isNull (int index)

实际上,它使用“null”字符串与内容进行比较。
JSONObject.NULL.equals(this.opt(index));

这个应该被点赞。它是遍历数组的完美解决方案。 - ehartwell

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