218 votes

Comment vérifier si une clé JSON existe ?

Ainsi, je reçois des valeurs JSON du serveur mais je ne sais pas s'il y aura un champ particulier ou non.

Comme ça :

{ "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"
}

J'aimerais vérifier si le champ nommé "club" existe, de sorte qu'à l'analyse syntaxique je n'obtienne pas

org.json.JSONException : Aucune valeur pour le club

339voto

PX Developer Points 1473

La classe JSONObject possède 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 mapping pour name. Le mappage peut être NULL.

182voto

Nirali Points 4203

Vous pouvez vérifier de cette façon où 'HAS' - Renvoie vrai si cet objet a une correspondance 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 un message vrai si cet objet n'a pas d'objet. pour le nom ou s'il a une correspondance dont la valeur est NULL.

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

19voto

blackbelt Points 45840

Vous pourriez JSONObject#has en fournissant le key en entrée et vérifiez si la méthode renvoie true o false . Vous pouvez également

utiliser optString au lieu de getString :

Renvoie la valeur mappée par le nom si elle existe, en la contraignant s'il y a lieu. si nécessaire. Renvoie la chaîne vide si une telle correspondance n'existe pas.

18voto

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 pour isNull fonction

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

10voto

IntelliJ Amiya Points 672

Vous pouvez utiliser has

public boolean has(String key)

Déterminer si le 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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X