> Как передаются массивы в JSON (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: Сбер
Стек: JavaScript
> Пример ответа
Короткий ответ
В JSON массивы передаются как упорядоченные списки значений, заключённые в квадратные скобки []. Элементы разделяются запятыми. Каждый элемент может быть строкой, числом, объектом, другим массивом, true, false или null. При сериализации в JavaScript метод JSON.stringify() преобразует массив в строку JSON, а JSON.parse() восстанавливает его обратно.
Подробное объяснение
JSON (JavaScript Object Notation) - это текстовый формат обмена данными, основанный на синтаксисе JavaScript. Массивы в JSON представляют собой упорядоченные коллекции значений. Синтаксически они идентичны массивам JavaScript, но с ограничениями по типам данных.
Ключевые правила:
- Массив начинается с
[и заканчивается] - Элементы разделяются запятыми
- Допустимые типы элементов: string (в двойных кавычках), number, object, array, boolean, null
- Нельзя использовать undefined, функции, символы, BigInt - они либо удаляются, либо преобразуются в null
- Последняя запятая (trailing comma) не допускается
При сериализации JSON.stringify() рекурсивно обрабатывает все вложенные элементы. Если массив содержит значения, не поддерживаемые JSON, они либо игнорируются (undefined в массиве превращается в null), либо вызывают ошибку (BigInt).
При десериализации JSON.parse() восстанавливает массив как экземпляр Array. Важно: порядок элементов сохраняется, но типы могут измениться - например, числа с плавающей точкой остаются числами, а строки остаются строками.
На практике
При передаче массивов через JSON нужно учитывать несколько практических аспектов:
-
Глубокое копирование:
JSON.parse(JSON.stringify(arr))создаёт глубокую копию массива, но теряет методы, прототипы и специальные объекты (Date превращается в строку, Map/Set - в пустые объекты). -
Производительность: Для больших массивов (сотни тысяч элементов) сериализация может быть затратной. Используйте streaming-подходы или библиотеки вроде
fast-json-stringify. -
Безопасность: Никогда не используйте
eval()для парсинга JSON - толькоJSON.parse(). Валидируйте входные данные, особенно если массив содержит пользовательский ввод. -
Совместимость: Убедитесь, что сервер и клиент ожидают одинаковую структуру. Например, если сервер возвращает
{"items": [...]}, клиент должен обращаться кdata.items. -
Обработка ошибок: Всегда оборачивайте
JSON.parse()в try-catch, так как невалидный JSON вызовет исключение.
Пример кода
JAVASCRIPT// Сериализация массиваconst users = [{ id: 1, name: "Alice", active: true },{ id: 2, name: "Bob", active: false }];const jsonString = JSON.stringify(users);console.log(jsonString);// [{"id":1,"name":"Alice","active":true},{"id":2,"name":"Bob","active":false}]// Десериализацияconst parsed = JSON.parse(jsonString);console.log(parsed[0].name); // "Alice"// Обработка специальных значенийconst mixed = [1, "text", null, undefined, () => {}];console.log(JSON.stringify(mixed)); // [1,"text",null,null,null]// Вложенные массивыconst matrix = [[1, 2], [3, 4]];console.log(JSON.stringify(matrix)); // [[1,2],[3,4]]// Безопасный парсингtry {const data = JSON.parse(invalidJson);} catch (e) {console.error("Invalid JSON:", e.message);}
Как отвечать на собеседовании
Начните с чёткого определения: массивы в JSON - это упорядоченные списки в квадратных скобках. Затем перечислите допустимые типы элементов. Упомяните, что JSON.stringify и JSON.parse - основные инструменты работы. Добавьте про ограничения: отсутствие undefined, функций, циклических ссылок. Если спросят про производительность, скажите, что для больших данных лучше использовать streaming. Покажите понимание практических проблем: глубокое копирование, безопасность, обработка ошибок. Завершите примером кода с try-catch.
Что проверяет интервьюер
Интервьюер оценивает:
- Базовое понимание формата JSON и его отличий от объектов JavaScript
- Знание методов
JSON.stringifyиJSON.parseс их особенностями (replacer, space) - Осведомлённость об ограничениях: какие типы данных не поддерживаются
- Умение обрабатывать краевые случаи: undefined, null, циклические ссылки
- Практические навыки: безопасный парсинг, глубокое копирование, работа с вложенными структурами
- Понимание производительности и альтернатив для больших данных
Типичные ошибки
- Использование одинарных кавычек: JSON требует двойные кавычки для строк и ключей
- Trailing comma:
[1, 2, 3,]вызовет ошибку парсинга - Попытка сериализовать undefined или функцию: они будут удалены или заменены на null
- Игнорирование циклических ссылок:
JSON.stringifyвыбросит TypeError - Отсутствие try-catch при парсинге: невалидный JSON упадёт с ошибкой
- Предположение, что порядок ключей объекта гарантирован: в JSON порядок ключей не специфицирован, хотя в JavaScript обычно сохраняется
- Использование
eval()вместоJSON.parse(): это серьёзная уязвимость безопасности
> Похожие задачи по frontend
В каком формате писать ответ (XML, JSON, YAML)
Как понимать ошибку в ответе с параметром direction в JSON
Какие особенности у JSON
Что такое temporal dead zone (TDZ) в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью