2012-01-21 21 views
5

W języku Java, jeśli użyję następującego JSON ciąg jako przykład, w jaki sposób mogę sprawdzić, czy obiekty są pusty/null?Jak sprawdzić, czy obiekt JSON jest pusty w Javie?

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

Próbowałem, używając:

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*/} 

ale te IF oświadczenia jeszcze powrócić prawdziwe (jak gdyby nie są puste/null).

Czy ktoś ma rozwiązanie?

Edytuj: Przez "obiekt", faktycznie miałem na myśli array.

Odpowiedz

10

Żadna z tych dwóch rzeczy są null; są tablice. Rezultat jest dokładnie taki, jakiego można się spodziewać.

Jedna z tablic jest pusta, a druga zawiera pojedynczy element, który jest null.

Jeśli chcesz się dowiedzieć, czy tablica jest pusta, musisz pobrać tablicę, a następnie sprawdzić jej długość.

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

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

Edycja wyjaśnienie: szyku zawierającym żadnych elementów (puste) i tablicę, która zawiera element, który jest nullsą całkowicie różne rzeczy. W przypadku drugiej macierzy nie jest ona ani pusta. Jak wspomniałem, jest to tablica, która ma pojedynczy element, który jest null. Jeśli interesuje cię ustalenie, czy tak jest, to musisz pobrać tablicę, a następnie przetestować ją, testując każdy element, aby sprawdzić, czy jest ona zgodna z ustawieniami.

+0

Dziękuję za wyjaśnienie null języka Java (: Jestem zbyt przyzwyczajony do pracy z PHP (gdzie sprawdzanie wartości zerowej zwykle dotyczy zarówno pustych, jak i zerowych) – 92Jacko

+0

Cieszę się, że mogłem pomóc. Szczerze mówiąc, IMHO unikałbym używania 'null' Z tego powodu w języku Java 'null' ma specjalne znaczenie, które nie jest równe" 0 "lub" puste "- może być przypisane tylko do zmiennych referencyjnych obiektu i wskazuje, że zmienna nie ma przypisanego odniesienia do obiektu. –

2

Zgodnie z tą dokumentacją JSONObject API, isNull sprawdza wartość NULL, co nie jest prawdą w Twoim przypadku.

Jeśli wartość 'null_object_1' jest String, trzeba użyć String temp = getString("keyName") i sprawdzić

!("".equals(temp)); 
Powiązane problemy