Как проверить, пуст ли объект JSON в Java?

В Java, если я использую следующую строку JSON в качестве примера, как мне проверить, являются ли объекты пустыми/нулевыми?

{"null_object_1" : [], "null_object_2" : [null] }

Я пытался использовать:

if(!jsonSource.isNull("null_object_1"))  {/*null_object_1 is not empty/null*/}
if(!jsonSource.isNull("null_object_2"))  {/*null_object_2 is not empty/null*/}

Но эти операторы IF по-прежнему возвращают true (как будто они не пустые/нулевые).

у кого-нибудь есть решение?

Изменить: под "объектом" я имел в виду array.


person 92Jacko    schedule 21.01.2012    source источник


Ответы (2)


Ни одна из этих двух вещей не является null; они массивы. Результат именно такой, какой вы ожидаете.

Один из ваших массивов пуст, другой содержит единственный элемент null.

Если вы хотите узнать, пуст ли массив, вам нужно получить массив, а затем проверить его длину.

JSONObject myJsonObject = 
    new JSONObject("{\"null_object_1\":[],\"null_object_2\":[null]}");

if (myJsonObject.getJSONArray("null_object_1").length() == 0) {
    ... 
}

Изменить, чтобы уточнить: массив без элементов (пустой) и массив с элементом, равным null, являются совершенно разными вещами. В случае вашего второго массива он не является ни null, ни пустым. Как я уже говорил, это массив с единственным элементом null. Если вам интересно определить, так ли это, вам нужно будет получить массив, а затем выполнить итерацию по нему, проверяя каждый элемент, чтобы увидеть, был ли он null, и соответственно воздействовать на результаты.

person Brian Roach    schedule 21.01.2012
comment
Спасибо за разъяснение нулевого значения Java (: я слишком привык работать с PHP (где проверка нулевого значения обычно выполняется как для пустого, так и для нулевого значения). - person 92Jacko; 21.01.2012
comment
Рад, что смог помочь. Честно говоря, ИМХО, по этой причине я бы не стал использовать null. В Java null имеет особое значение, которое не равнозначно 0 или пусто - оно может быть назначено только переменным ссылки на объект и указывает, что переменной не назначена ссылка на объект. - person Brian Roach; 21.01.2012

Согласно этой документации JSONObject API, isNull проверяет значение NULL, что неверно в вашем случае.

Если значение null_object_1 равно String, вам нужно использовать String temp = getString("keyName") и проверить

!("".equals(temp));
person kosa    schedule 21.01.2012