it-swarm.com.de

Wie kann man prüfen, ob ein Json-Schlüssel existiert?

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

120
Adam Varhegyi

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.

212
PX Developer

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"));
127
Nirali

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

12
Blackbelt

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
}
8
IntelliJ Amiya

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)

6

Versuche dies

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}
2
R9J

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.

2
fuzzKitty

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.
}
0
Dorus Blanken

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!

0
Gurinder
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.

0
cdturner

Versuche dies:

let json=yourJson

if(json.hasOwnProperty(yourKey)){
    value=json[yourKey]
}
0
Aishwarya