13

我不知道如何确定 json 数组中的元素是否为空。要检查 jsonObject 本身是否为空,只需使用:

jsonObject.isNullObject();

但是当对象是一个数组并且我想检查该数组的元素之一是否为空时,这不起作用:

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

数组元素也没有可用的 isNull 方法。如何检查 jsonarray 中的值是否为空?知道我正在从 javascript 传递一个空对象可能会有所帮助。当从 javascript 以 json 格式传递 null 时,它在 java 中的含义可能并不相同,但我也尝试在 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());
}
4

3 回答 3

20

尝试.isNull()

对于您的示例:

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

但是,要回答这个问题的标题“如何判断 JSONArray 元素是否为空”,请使用.equals()

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

if (!jsonArray.get(1).equals(null)) {
    //jsonArray[1] is not null
}
于 2013-02-15T23:40:40.293 回答
15

我猜 json 将 null 值作为字符串传递,因此您不能将 null 作为 java 元素进行检查。而是将 null 值视为字符串,以这种方式进行检查:

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

我已将原始问题中的代码片段更新为工作版本。

于 2012-09-04T01:44:57.643 回答
2

试试 JSONArray 的方法

public boolean isNull (int index)

实际上,它使用“null”字符串与内容进行比较

JSONObject.NULL.equals(this.opt(index));
于 2015-06-03T07:32:59.760 回答