Проверка наличия ключа в 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(), который при отсутствии ключа вернёт пустую строку.

Детальнее: Обработка
Анализ: метод 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() для правильной обработки данных.


