Проверить значение существует или нет в объекте JSON, чтобы избежать исключения JSON
Я получаю JSONObject из вызова webservice.
JSONObject result = ...........
Когда я получаю доступ как result.getString("fieldName");
Если fieldName
существует в этом JSONObject, тогда он работает нормально. Если этого не существует, я получаю исключение JSONObject["fieldName"] not found.
Я могу использовать try catch
для этого. Но у меня есть почти 20 полей, подобных this.Am мне нужно использовать 20 try catch блоков для этого или есть альтернатива для этого. Спасибо заранее...
Ответы
Ответ 1
Существует метод JSONObject#has(key)
, предназначенный именно для этой цели. Таким образом, вы можете избежать обработки исключений для каждого поля.
if(result.has("fieldName")){
// It exists, do your stuff
} else {
// It doesn't exist, do nothing
}
Кроме того, вы можете использовать метод JSONObject#isNull(str)
, чтобы проверить, есть ли он null
или нет.
if(result.isNull("fieldName")){
// It doesn't exist, do nothing
} else {
// It exists, do your stuff
}
Вы также можете перенести это на метод (для повторного использования кода), где вы передаете JSONObject и String, и метод возвращает, если это поле присутствует или нет.
Ответ 2
Предполагая, что вы используете org.json.JSONObject
, вы можете вместо этого использовать JSONObject#optString(String key, String defaultValue)
. Он вернет defaultValue
, если key
отсутствует.
Ответ 3
Проверьте, содержит ли ваша реализация JsonObject метод "has has". Это могут быть проверки, если свойство существует в объекте.
Многие реализации JsonObject содержат этот метод.
Ответ 4
Я использую этот код для этого, он возвращает undefined или указанный defaultValue вместо растущего исключения
/* 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;
}
Ответ 5
Лучшим решением является использование optString вместо getString.
String name = jsonObject.optString("fieldName");
// it will returns the empty string ("") if the key you specify doesn't exist