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
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.
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"));
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
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
}
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)
Essaye ça
if(!jsonObj.isNull("club")){
jsonObj.getString("club");
}
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.
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.
}
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!
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.
Essaye ça:
let json=yourJson
if(json.hasOwnProperty(yourKey)){
value=json[yourKey]
}