Проверка наличия ключа в JSON: исключение JSONException

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для проверки существования ключа в объекте JSON вам пригодится метод has() из класса JSONObject.

Java
Скопировать код
import org.json.JSONObject;

JSONObject jsonObj = new JSONObject("{\"exampleKey\":\"value\"}");
boolean keyExists = jsonObj.has("exampleKey");  // Возвращает true, если ключ "exampleKey" находится в JSON объекте

Просто замените "exampleKey" на требуемый ключ. Метод has() возвращает булево значение, подтверждающее наличие или отсутствие ключа.

Если воспользоваться getString(), то при отсутствии ключа выскочит исключение JSONException. Чтобы этого избежать, лучше использовать optString(), который при отсутствии ключа вернёт пустую строку.

Кинга Идем в IT: пошаговый план для смены профессии

Детальнее: Обработка null значений и условных проверок

Анализ: метод isNull()

Если ключ есть в JSON, но его значение равно null, то применение isNull() позволит понять, что ключ присутствует, а значения нет.

Java
Скопировать код
if (jsonObj.has("exampleKey") && !jsonObj.isNull("exampleKey")) {
    // Ключ есть, но он не равен null
}

Безопасное извлечение: optString()

Функция optString() извлекает значение ключа или отдает пустую строку в случае его отсутствия, защищая программу от выбрасывания JSONException.

Java
Скопировать код
String value = jsonObj.optString("exampleKey", "DefaultValue");
// "DefaultValue" подставится на место ключа, если "exampleKey" будет отсутствовать

Условия присутствия ключа

Применяйте условные операторы if-else для обработки ситуаций, когда ключ может послеutar или отсутсвовать.

Java
Скопировать код
if (jsonObj.has("exampleKey")) {
    // Ключь присутствует
} else {
    // Ключ отсутствует
}

Завершение

Избегайте излишних has()

Не стоит увлекаться проверками has(), если вполне можно использовать метод optString() для безопасного получения значения.

Java
Скопировать код
String value = jsonObj.optString("exampleKey", "DefaultValue");

Проверка на null при маппинге

При подготовке объекта из JSON всегда производите проверку на наличие и не null значение ключа, избегая тем самым ошибок.

Java
Скопировать код
MyObject myObj = null;
if (jsonObj.has("myObjectKey") && !jsonObj.isNull("myObjectKey")) {
    myObj = new MyObject(jsonObj.getJSONObject("myObjectKey"));
    // Объект успешно создан!
}

Работа с неоднозначной структурой JSON

Когда работаете с JSON, где ключи могут отсутствовать, применяйте has() для формирования стабильной стратегии.

Java
Скопировать код
JSONArray items = jsonObj.optJSONArray("items");
if (items != null) {
    // Выполняем обработку данных
}

Визуализация

Допустим, у вас есть JSON с эмоджи дома (🏠), и вам надо проверить существование ключа библиотека:

Markdown
Скопировать код
🏠: { "кухня": "Буррито на завтрак 🌯", "гостиная": "PS5", "ванная": "Резиновая уточка 🦆" }

Проверяем наличие ключа библиотека:

Java
Скопировать код
if (jsonObject.has("библиотека")) {
    // Библиотека есть! 📚✔️
} else {
    // Библиотеки нет. 📚❌
}

Подробнее

Варианты существования ключей

Ключ может отсутствовать или содержать значение null. Будьте готовы к любому из этих случаев.

Обязательные и дополнительные ключи

Выделите, какие ключи обязательны, а какие нет. Это будет иметь значение при принятии решений в вашем коде.

Сложные структуры JSON

В сложных структурах JSON используйте комбинацию has(), optJSONObject() и optJSONArray() для правильной обработки данных.

Полезные материалы