Проверка наличия ключа в JSON: исключение JSONException
Быстрый ответ
Для проверки существования ключа в объекте JSON вам пригодится метод has()
из класса JSONObject
.
import org.json.JSONObject;
JSONObject jsonObj = new JSONObject("{\"exampleKey\":\"value\"}");
boolean keyExists = jsonObj.has("exampleKey"); // Возвращает true, если ключ "exampleKey" находится в JSON объекте
Просто замените "exampleKey"
на требуемый ключ. Метод has()
возвращает булево значение, подтверждающее наличие или отсутствие ключа.
Если воспользоваться getString()
, то при отсутствии ключа выскочит исключение JSONException
. Чтобы этого избежать, лучше использовать optString()
, который при отсутствии ключа вернёт пустую строку.
Детальнее: Обработка null
значений и условных проверок
Анализ: метод isNull()
Если ключ есть в JSON, но его значение равно null
, то применение isNull()
позволит понять, что ключ присутствует, а значения нет.
if (jsonObj.has("exampleKey") && !jsonObj.isNull("exampleKey")) {
// Ключ есть, но он не равен null
}
Безопасное извлечение: optString()
Функция optString()
извлекает значение ключа или отдает пустую строку в случае его отсутствия, защищая программу от выбрасывания JSONException
.
String value = jsonObj.optString("exampleKey", "DefaultValue");
// "DefaultValue" подставится на место ключа, если "exampleKey" будет отсутствовать
Условия присутствия ключа
Применяйте условные операторы if-else
для обработки ситуаций, когда ключ может послеutar или отсутсвовать.
if (jsonObj.has("exampleKey")) {
// Ключь присутствует
} else {
// Ключ отсутствует
}
Завершение
Избегайте излишних has()
Не стоит увлекаться проверками has()
, если вполне можно использовать метод optString()
для безопасного получения значения.
String value = jsonObj.optString("exampleKey", "DefaultValue");
Проверка на null
при маппинге
При подготовке объекта из JSON всегда производите проверку на наличие и не null
значение ключа, избегая тем самым ошибок.
MyObject myObj = null;
if (jsonObj.has("myObjectKey") && !jsonObj.isNull("myObjectKey")) {
myObj = new MyObject(jsonObj.getJSONObject("myObjectKey"));
// Объект успешно создан!
}
Работа с неоднозначной структурой JSON
Когда работаете с JSON, где ключи могут отсутствовать, применяйте has()
для формирования стабильной стратегии.
JSONArray items = jsonObj.optJSONArray("items");
if (items != null) {
// Выполняем обработку данных
}
Визуализация
Допустим, у вас есть JSON с эмоджи дома (🏠), и вам надо проверить существование ключа библиотека
:
🏠: { "кухня": "Буррито на завтрак 🌯", "гостиная": "PS5", "ванная": "Резиновая уточка 🦆" }
Проверяем наличие ключа библиотека
:
if (jsonObject.has("библиотека")) {
// Библиотека есть! 📚✔️
} else {
// Библиотеки нет. 📚❌
}
Подробнее
Варианты существования ключей
Ключ может отсутствовать или содержать значение null
. Будьте готовы к любому из этих случаев.
Обязательные и дополнительные ключи
Выделите, какие ключи обязательны, а какие нет. Это будет иметь значение при принятии решений в вашем коде.
Сложные структуры JSON
В сложных структурах JSON используйте комбинацию has()
, optJSONObject()
и optJSONArray()
для правильной обработки данных.