Tak więc otrzymuję wartości JSON z serwera, ale nie wiem, czy będzie określone pole, czy nie.
Więc jak:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
}
Czasami pojawi się dodatkowe pole, takie jak:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited",
"club":"somevalue"
}
Chciałbym sprawdzić, czy pole o nazwie „club” istnieje, aby podczas analizowania nie uzyskać org.json.JSONException: Brak wartości dla club
Odpowiedzi:
Klasa JSONObject ma metodę o nazwie „has”:
http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
źródło
Integer
typu?Integer
klucza jako klucza brzmi jak zła praktyka. JSON powinien zawierać klucz String i wartość tego, czego potrzebujesz.Możesz sprawdzić w ten sposób, gdzie „HAS” - zwraca wartość true, jeśli ten obiekt ma odwzorowanie nazwy. Mapowanie może mieć wartość NULL.
źródło
możesz
JSONObject#has
, podająckey
jako dane wejściowe i sprawdź, czy metoda zwracatrue
lubfalse
. Ty też możeszużyj
optString
zamiastgetString
:źródło
getString
zwróciłby pusty ciąg,optString
zwróciłby również pusty ciąg. Założenie sprawiłoby, że uważasz, że nieruchomość nie jest dostępna w sytuacji OP.Możesz użyć
has
Sprawdź, czy obiekt JSONObject zawiera określony klucz .
Przykład
źródło
tuż przed odczytaniem klucza sprawdź jak przed przeczytaniem
Definicja funkcji isNull
Oficjalna dokumentacja poniżej linku do
isNull
funkcjihttp://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String)
źródło
Spróbuj tego
źródło
isNull
w rzeczywistości służy do sprawdzenia, czy mapowanie jest zerowe, a nie do sprawdzania dostępności elementu json.Lepszy sposób, zamiast używać warunku takiego jak:
polega po prostu na użyciu istniejącej metody optString (), na przykład:
metoda optString ("key") zwróci pusty ciąg, jeśli klucz nie istnieje i dlatego nie zgłosi wyjątku.
źródło
Json ma metodę o nazwie
containsKey()
.Możesz go użyć do sprawdzenia, czy określony klucz znajduje się w zestawie Json.
źródło
działa we wszystkich obecnych przeglądarkach.
źródło
Spróbuj tego:
źródło
Możesz spróbować tego, aby sprawdzić, czy klucz istnieje, czy nie:
źródło
Dodam tylko kolejną rzecz, jeśli chcesz tylko sprawdzić, czy coś jest utworzone w JSONObject, czy nie, możesz użyć length (), ponieważ domyślnie, gdy JSONObject jest zainicjowany i nie jest wstawiony żaden klucz, ma po prostu puste nawiasy
{}
i użycie ma (Klawisz String) nie ma sensu.Możesz więc bezpośrednio pisać
if (jsonObject.length() > 0)
i robić swoje rzeczy.Miłej nauki!
źródło
Możesz użyć JsonNode # hasNonNull (String fieldName) , łączy metodę has i weryfikację, czy jest to wartość null, czy nie
źródło