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

Adam Varhegyi
quelle
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.

PX-Entwickler
quelle
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"));
Nirali
quelle
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

Schwarzer Gürtel
quelle
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
}
IntelliJ Amiya
quelle
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)

Stapelüberlaufbenutzer
quelle
2

Versuche dies

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}
R9J
quelle
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.

fuzzKitty
quelle
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
}
Udana Methmal
quelle
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.

cdturner
quelle
1

Versuche dies:

let json=yourJson

if(json.hasOwnProperty(yourKey)){
    value=json[yourKey]
}
Aishwarya
quelle
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.
}
Dorus Blanken
quelle
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!

Gurinder
quelle
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

Tiago Coelho
quelle