Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: JSON parsing, null handling, empty array, data validation, default values

Что будет, если в JSON отсутствует массив — nil или пустой массив?

Этот вопрос проверяет понимание обработки отсутствующих ключей в JSON и различий между null, отсутствием ключа и пустым массивом, что важно для устойчивого парсинга данных.

Короткий ответ

Если в JSON отсутствует ключ для массива, это не nil и не пустой массив — ключа просто нет. При парсинге в большинстве языков попытка получить значение по отсутствующему ключу вернёт null/nil/undefined, а не пустой массив. Чтобы гарантировать массив, нужно явно проверять: если значение null или отсутствует, использовать пустой массив по умолчанию. Это предотвращает ошибки типа "Cannot read property 'length' of null".

Длинный ответ

При работе с JSON, полученным из внешних источников (API, файлы), часто возникает неопределённость: что делать, если ожидаемый ключ с массивом отсутствует в данных? Важно понимать разницу между тремя состояниями: ключ отсутствует, ключ присутствует со значением null, ключ присутствует с пустым массивом []. Эти состояния обрабатываются по-разному при парсинге.

Различия состояний

  • Ключ отсутствует: В JSON-объекте нет такого поля. При доступе через obj.key в JavaScript вернёт undefined, в Python — KeyError или None в зависимости от метода (.get()), в Java — null.
  • Ключ со значением null: Поле есть, но его значение явно null. При доступе вернёт null/nil/None.
  • Пустой массив: Поле есть, значением является []. Это валидный массив нулевой длины.

Практическая обработка

Чтобы избежать ошибок, нужно явно задавать значение по умолчанию. Пример на JavaScript:

const jsonString = '{"name": "test"}'; // ключа "items" нет
const data = JSON.parse(jsonString);

// Небезопасно: может быть undefined или null
const unsafeItems = data.items; // undefined
// unsafeItems.length // TypeError

// Безопасный подход с логическим ИЛИ (||) или оператором нулевого слияния (??)
const items1 = data.items || []; // если data.items falsy (undefined, null, []), то []
const items2 = data.items ?? []; // если data.items null/undefined, то [] (но пустой массив останется)

// Явная проверка
let items3;
if (Array.isArray(data.items)) {
  items3 = data.items;
} else {
  items3 = [];
}
console.log(items3); // []

Пример на Python с использованием метода .get():

import json

json_str = '{"name": "test"}'
data = json.loads(json_str)

# .get() возвращает None, если ключа нет, но можно указать default
items = data.get('items', [])  # если ключа нет, вернёт []
# Однако, если значение может быть null, нужно дополнительная проверка
if items is None:
    items = []
# Или используем тернарный оператор
items = data['items'] if 'items' in data and data['items'] is not None else []
print(items)  # []

Где это применяется

Такая проверка критична при разработке API-клиентов, обработке конфигурационных файлов, чтении данных из баз. Она обеспечивает устойчивость к изменениям схемы данных и предотвращает сбои в цепочках обработки (например, при вызове .map(), .filter()).

Вывод: Всегда явно обрабатывайте отсутствующие ключи или null-значения, устанавливая пустой массив по умолчанию, чтобы код был предсказуемым и устойчивым к неполным данным.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    2

Навыки

  • JavaScript

    JavaScript

  • Python

    Python

Ключевые слова

#JSON parsing

#null handling

#empty array

#data validation

#default values

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.