Je reçois un objet JSON à partir d'un appel de service Web.
JSONObject result = ...........
Quand j'accède comme result.getString("fieldName");
Si la fieldName
existe dans ce JSONObject, alors il fonctionne bien. Si ce n'est pas le cas, j'obtiens une exception JSONObject["fieldName"] not found.
Je peux utiliser try catch
pour cela.Mais j'ai près de 20 champs comme celui-ci.Am je dois utiliser 20 blocs catch try pour ceci ou y a-t-il une alternative pour cela.Merci à l'avance.
Il existe une méthode JSONObject#has(key)
destinée à cet effet. De cette façon, vous pouvez éviter la gestion des exceptions pour chaque champ.
if(result.has("fieldName")){
// It exists, do your stuff
} else {
// It doesn't exist, do nothing
}
En outre, vous pouvez utiliser la méthode JSONObject#isNull(str)
pour vérifier si elle est null
ou non.
if(result.isNull("fieldName")){
// It doesn't exist, do nothing
} else {
// It exists, do your stuff
}
Vous pouvez également déplacer cela vers une méthode (pour la réutilisation de code), où vous passez un JSONObject et une chaîne et la méthode retourne si le champ est présent ou non.
En supposant que vous utilisiez org.json.JSONObject
, vous pouvez utiliser JSONObject#optString(String key, String defaultValue)
à la place. Il retournera defaultValue
, si key
est absent:
String value = obj.optString(fieldName, defaultValueIfNull);
La meilleure solution consiste à utiliser optString au lieu de getString.
String name = jsonObject.optString("fieldName");
// it will return an empty string ("") if the key you specify doesn't exist
J'utilise ce code pour le faire, il retourne undefined ou une defaultValue spécifiée au lieu d'exception croissante
/* ex: getProperty(myObj,'aze.xyz',0) // return myObj.aze.xyz safely
* accepts array for property names:
* getProperty(myObj,['aze','xyz'],{value: null})
*/
function getProperty(obj, props, defaultValue) {
var res, isvoid = function(x){return typeof x === "undefined" || x === null;}
if(!isvoid(obj)){
if(isvoid(props)) props = [];
if(typeof props === "string") props = props.trim().split(".");
if(props.constructor === Array){
res = props.length>1 ? getProperty(obj[props.shift()],props,defaultValue) : obj[props[0]];
}
}
return typeof res === "undefined" ? defaultValue: res;
}
Vérifiez si votre implémentation JsonObject contient une méthode appelée "a". Il pourrait être vérifie si la propriété existe dans l'objet.
De nombreuses implémentations JsonObject contiennent cette méthode.