Ich bekomme also einige JSON-Werte vom Server, weiß aber nicht, ob es ein bestimmtes Feld gibt oder nicht.
So wie:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
}
Und manchmal gibt es ein zusätzliches Feld wie:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited",
"club":"somevalue"
}
Ich würde gerne prüfen, ob das Feld "club" existiert, damit ich beim Parsen keine org.json.JSONException bekomme: Kein Wert für club
Die JSONObject-Klasse hat eine Methode namens "has":
http://developer.Android.com/reference/org/json/JSONObject.html#has(Java.lang.String)
Gibt "true" zurück, wenn für dieses Objekt eine Zuordnung für den Namen vorhanden ist. Die Zuordnung kann NULL sein.
Sie können auf diese Weise prüfen, wo 'HAS' - Gibt true zurück, wenn für dieses Objekt eine Zuordnung für den Namen vorhanden ist. Die Zuordnung kann NULL sein.
if (json.has("status")) {
String status = json.getString("status"));
}
if (json.has("club")) {
String club = json.getString("club"));
}
Sie können auch mit 'isNull' prüfen - Gibt true zurück, wenn dieses Objekt keine .__ hat. Zuordnung für Name oder wenn es eine Zuordnung hat, deren Wert NULL ist.
if (!json.isNull("club"))
String club = json.getString("club"));
sie könnten JSONObject#has
angeben, die key
als Eingabe angeben und prüfen, ob die Methode true
oder false
zurückgibt. Du könntest auch
verwenden Sie optString
anstelle von getString
:
Gibt den nach Name zugeordneten Wert zurück, falls er existiert, und erzwingt ihn, wenn notwendig. Gibt die leere Zeichenfolge zurück, wenn keine solche Zuordnung vorhanden ist
Sie können has
verwenden.
public boolean has(String key)
Stellen Sie fest, ob das JSONObject einen bestimmten Schlüssel enthält.
Beispiel
JSONObject JsonObj = new JSONObject(Your_API_STRING); //JSONObject is an unordered collection of name/value pairs
if (JsonObj.has("address")) {
//Checking address Key Present or not
String get_address = JsonObj .getString("address"); // Present Key
}
else {
//Do Your Staff
}
kurz vor dem Lesen des Schlüssels prüfen Sie es wie zuvor
JSONObject json_obj=new JSONObject(yourjsonstr);
if(json_obj.isNull("club"))
{
//it's contain value to be read operation
}
else
{
//it's not contain key club or isnull so do this operation here
}
isNull-Funktionsdefinition
Returns true if this object has no mapping for name or
if it has a mapping whose value is NULL.
offizielle Dokumentation unten für die isNull
-Funktion
http://developer.Android.com/reference/org/json/JSONObject.html#isNull(Java.lang.String)
Versuche dies
if(!jsonObj.isNull("club")){
jsonObj.getString("club");
}
Ein besserer Weg, anstatt eine Bedingung zu verwenden:
if (json.has("club")) {
String club = json.getString("club"));
}
verwenden Sie einfach die vorhandene Methode optString () wie folgt:
String club = json.optString("club);
die Methode optString ("key") gibt einen leeren String zurück, wenn der Schlüssel nicht vorhanden ist. Daher wird keine Ausnahme ausgelöst.
Sie können dies versuchen, um zu überprüfen, ob der Schlüssel existiert oder nicht:
JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
object.get("key");
//etc. etc.
}
Ich füge nur eine weitere Sache hinzu. Falls Sie nur prüfen möchten, ob in JSONObject etwas erstellt wird oder nicht, können Sie length () verwenden, da JSONObject standardmäßig initialisiert wird und kein Schlüssel eingefügt wird geschweifte Klammern {}
und die Verwendung von has (String-Schlüssel) macht keinen Sinn.
So können Sie if (jsonObject.length() > 0)
direkt schreiben und Ihre Sachen erledigen.
Viel Spaß beim Lernen!
I used hasOwnProperty('club')
var myobj = { "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
};
if ( myobj.hasOwnProperty("club"))
// do something with club (will be false with above data)
var data = myobj.club;
if ( myobj.hasOwnProperty("status"))
// do something with the status field. (will be true with above ..)
var data = myobj.status;
funktioniert in allen aktuellen Browsern.
Versuche dies:
let json=yourJson
if(json.hasOwnProperty(yourKey)){
value=json[yourKey]
}