web-dev-qa-db-fra.com

Comment vérifier si une clé json existe?

Donc, je reçois 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 de ne pas obtenir org.json.JSONException lors de l'analyse syntaxique: Aucune valeur pour club

120
Adam Varhegyi

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

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

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

212
PX Developer

Vous pouvez vérifier de cette manière où 'HAS' - Renvoie true si cet objet a un mappage pour name. 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 name ou s'il a un mappage dont la valeur est NULL.

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

vous pourriez JSONObject#has, en fournissant key en entrée et vérifier si la méthode renvoie true ou false Tu pourrais aussi

utilisez optString au lieu de getString:

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

12
Blackbelt

Vous pouvez utiliser has

public boolean has(String key)

Déterminez si JSONObject contient un 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
}
8
IntelliJ Amiya

juste avant de lire clé vérifier 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 fonction isNull

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

6

Essaye ça

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

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") retournera une chaîne vide si la clé n'existe pas et ne vous lancera pas, par conséquent, une exception.

2
fuzzKitty

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
Dorus Blanken

J'ajoute simplement autre chose. Si vous voulez simplement vérifier si quelque chose est créé dans JSONObject, vous pouvez utiliser length (), car par défaut, lorsque JSONObject est initialisé et qu'aucune clé n'est insérée, il est vide. les accolades {} et l'utilisation de has (clé de chaîne) n'ont aucun sens.

Vous pouvez donc écrire directement if (jsonObject.length() > 0) et faire vos choses.

Bonne apprentissage!

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;

fonctionne dans tous les navigateurs actuels.

0
cdturner

Essaye ça:

let json=yourJson

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