Wie überprüfe ich, ob ein JSON-Schlüssel vorhanden ist?


165

Ich erhalte also einige JSON-Werte vom Server, weiß aber nicht, ob es ein bestimmtes Feld geben wird 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 möchte überprüfen, ob das Feld "club" vorhanden ist, damit ich beim Parsen keine org.json.JSONException erhalte: Kein Wert für club


if (jsonObject.getString ("club")! = null) {// das Tal hier holen}
Software Sainath

3
Nein, bei der Ausnahmebehandlung wird der Code gestoppt und weitere Analyseaktionen werden nicht ausgeführt.
Adam Varhegyi

1
@ SoftwareSainath Das funktioniert nicht, hat immer noch die Ausnahme.
Adam Varhegyi

String clubvalue = ""; try (clubvalue = jsonobject.getString ("club");} catch (Ausnahme e) {}
Software Sainath

Antworten:


266

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 dieses Objekt eine Zuordnung für den Namen hat. Die Zuordnung kann NULL sein.


28
weil "enthält" zu kitschig ist? :)
Omri374

Was ist, wenn der Schlüssel vom IntegerTyp ist?
Eido95

2
@ Eido95 mit einem Integerals Schlüssel klingt nach schlechter Praxis. JSON sollte einen String-Schlüssel und einen Wert von allem enthalten, was Sie benötigen.
Nico

@ Eido95, ich glaube, für eine Ganzzahl gibt es immer einen Wert. Jedes Mal, wenn Sie eine Ganzzahl deklarieren, müssen Sie sie mit einem Wert initialisieren.
Mutony

154

Sie können auf diese Weise überprüfen, wo 'HAS' - Gibt true zurück, wenn dieses Objekt eine Zuordnung für den Namen hat. 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' überprüfen - Gibt true zurück, wenn dieses Objekt keine Zuordnung für den Namen hat oder wenn es eine Zuordnung hat, deren Wert NULL ist.

if (!json.isNull("club"))
    String club = json.getString("club"));

1
welche json lib sind Sie verwenden, können Sie ein einfaches Beispiel für json-smart oder json-simple bieten
samuel Owino

@samuelowino json ist die Variable, die Ihr Objekt enthält
Fernando Torres

17

Sie könnten JSONObject#has, sofern die keyals Eingabe und überprüfen , ob die Methode zurückgibt , trueoder false. Du könntest auch

Verwenden Sie optStringanstelle von getString:

Gibt den nach Namen zugeordneten Wert zurück, falls vorhanden, und erzwingt ihn gegebenenfalls. Gibt die leere Zeichenfolge zurück, wenn keine solche Zuordnung vorhanden ist


1
Obwohl diese Methode für andere möglicherweise von Nutzen ist, wird sie nicht zurückgegeben, wenn der Wert vorhanden ist. Wenn getStringeine leere Zeichenfolge zurückgegeben worden optStringwäre , würde auch eine leere Zeichenfolge zurückgegeben. Angenommen, Sie glauben dann, dass die Immobilie in der Situation von OP nicht verfügbar ist.
halfpastfour.am

@ Blackbelt hast du Quellen dafür?
Tsuz

10

Sie können verwenden has

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
}

10

Überprüfen Sie die Taste kurz vor dem Lesen wie vor dem Lesen

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 unter Link für isNullFunktion

http://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String)


2

Versuche dies

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

2
isNulldient eigentlich dazu, zu überprüfen, ob die Zuordnung null ist, und nicht, um die Verfügbarkeit eines json-Mitglieds zu überprüfen.
Reza_Rg

2

Ein besserer Weg, anstatt eine Bedingung wie:

if (json.has("club")) {
    String club = json.getString("club"));
 }

Verwenden Sie einfach die vorhandene Methode optString () wie folgt:

String club = json.optString("club);

Die optString-Methode ("key") gibt einen leeren String zurück, wenn der Schlüssel nicht vorhanden ist, und löst daher keine Ausnahme aus.


2

Json hat eine Methode namens containsKey().

Sie können damit überprüfen, ob ein bestimmter Schlüssel im Json-Set enthalten ist.

File jsonInputFile = new File("jsonFile.json"); 
InputStream is = new FileInputStream(jsonInputFile);
JsonReader reader = Json.createReader(is);
JsonObject frameObj = reader.readObject();
reader.close();

if frameObj.containsKey("person") {
      //Do stuff
}

1
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.


1

Versuche dies:

let json=yourJson

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

1

Sie können dies versuchen, um zu überprüfen, ob der Schlüssel vorhanden ist oder nicht:

JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
  object.get("key");
  //etc. etc.
}

0

Ich füge nur noch etwas hinzu: Wenn Sie nur überprüfen möchten, ob in JSONObject etwas erstellt wurde oder nicht, können Sie length () verwenden, da JSONObject standardmäßig initialisiert und kein Schlüssel eingefügt wird, nur leere Klammern hat {}und has hat (String key) macht keinen Sinn.

So können Sie direkt schreiben if (jsonObject.length() > 0)und Ihre Sachen machen.

Viel Spaß beim Lernen!


0

Sie können den JsonNode # hasNonNull (String fieldName) verwenden . Er mischt die has- Methode und die Überprüfung, ob es sich um einen Nullwert handelt oder nicht

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.