Comment vérifier si une clé json existe?


165

Donc, j'obtiens des valeurs JSON du serveur mais je ne sais pas s'il y aura un champ particulier ou non.

Alors comme:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}

Et parfois, il y aura un champ supplémentaire comme:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}

Je voudrais vérifier si le champ nommé "club" existe afin qu'à l'analyse, je n'obtienne pas org.json.JSONException: Aucune valeur pour club


if (jsonObject.getString ("club")! = null) {// obtenir le val ici}
Logiciel Sainath

3
Non, à l'exception de la gestion du code, le code s'arrête et d'autres actions d'analyse ne seront pas exécutées.
Adam Varhegyi

1
@SoftwareSainath Cela ne fonctionne pas, j'ai toujours l'exception.
Adam Varhegyi

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

Réponses:


267

La classe JSONObject a une méthode nommée "has":

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

Renvoie true si cet objet a un mappage pour le nom. Le mappage peut être NULL.


28
parce que "contient" est trop ringard? :)
Omri374

Et si la clé est de Integertype?
Eido95

2
@ Eido95 avoir Integercomme clé sonne comme une mauvaise pratique. JSON doit être avec une clé String et une valeur de tout ce dont vous avez besoin.
Nico

@ Eido95, je crois que pour un entier, il y a toujours une valeur, chaque fois que vous déclarez un entier, vous devez l'initialiser avec une valeur.
mut tony

154

Vous pouvez vérifier de cette façon où 'HAS' - Renvoie true si cet objet a un mappage pour le nom. Le mappage peut être NULL.

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

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

Vous pouvez également vérifier en utilisant 'isNull' - Renvoie true si cet objet n'a pas de mappage pour le nom ou s'il a un mappage dont la valeur est NULL.

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

1
quelle lib json utilisez-vous, pouvez-vous fournir un exemple simple pour json-smart ou json-simple
samuel owino

@samuelowino json est la variable qui contient votre objet
Fernando Torres

17

vous pouvez JSONObject#has, en fournissant keycomme entrée et vérifier si la méthode retourne trueou false. Tu pourrais aussi

utiliser à la optStringplace de getString:

Renvoie la valeur mappée par nom si elle existe, en la contraignant si nécessaire. Renvoie la chaîne vide si aucun mappage n'existe


1
Bien que cette méthode de puisse être utile pour d'autres, elle ne retourne pas si la valeur existe. Si getStringaurait renvoyé une chaîne vide, optStringrenvoie également une chaîne vide. L'hypothèse vous ferait alors croire que la propriété n'est pas disponible dans la situation d'OP.
halfpastfour.am

@Blackbelt avez-vous des sources pour cela?
tsuz

11

juste avant de lire la clé, vérifiez-la comme avant de lire

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
}

Définition de la fonction isNull

Returns true if this object has no mapping for name or
if it has a mapping whose value is NULL. 

documentation officielle ci-dessous lien pour la isNullfonction

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


10

Vous pouvez utiliser has

public boolean has(String key)

Déterminez si le JSONObject contient une clé spécifique .

Exemple

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
}

2

Essaye ça

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

2
isNullest en fait pour vérifier si le mappage est nul, pas pour vérifier la disponibilité d'un membre json.
Reza_Rg

2

Une meilleure façon, au lieu d'utiliser un conditionnel comme:

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

consiste simplement à utiliser la méthode existante optString (), comme ceci:

String club = json.optString("club);

la méthode optString ("key") renverra une chaîne vide si la clé n'existe pas et ne vous lèvera donc pas d'exception.


2

Json a une méthode appelée containsKey().

Vous pouvez l'utiliser pour vérifier si une certaine clé est contenue dans l'ensemble Json.

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;

fonctionne dans tous les navigateurs actuels.


1

Essaye ça:

let json=yourJson

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

1

Vous pouvez essayer ceci pour vérifier si la clé existe ou non:

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

0

J'ajoute juste une autre chose, au cas où vous voudriez juste vérifier si quelque chose est créé dans JSONObject ou non, vous pouvez utiliser length (), car par défaut, lorsque JSONObject est initialisé et qu'aucune clé n'est insérée, il a juste des accolades vides {}et en utilisant a (String key) n'a aucun sens.

Ainsi, vous pouvez directement écrire if (jsonObject.length() > 0)et faire vos affaires.

Bon apprentissage!


0

Vous pouvez utiliser le JsonNode # hasNonNull (String fieldName) , il mélange la méthode has et la vérification s'il s'agit d'une valeur nulle ou non

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.