> Какие типы могут быть ключами в JSON (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: Сбер
Стек: JavaScript
> Пример ответа
Короткий ответ
В JSON ключами могут быть только строки. В отличие от JavaScript-объектов, где ключи автоматически приводятся к строкам, формат JSON строго ограничен: имя свойства всегда заключается в двойные кавычки. Числа, булевы значения, null, массивы и объекты в качестве ключей недопустимы. При парсинге JSON.parse все ключи становятся строками, даже если в исходном тексте они выглядели как числа.
Подробное объяснение
JSON - это текстовый формат, основанный на подмножестве синтаксиса JavaScript, но с более строгими правилами. Спецификация RFC 8259 определяет объект как неупорядоченное множество пар "имя: значение", где имя - это строка. Это принципиальное отличие от JavaScript-объектов, где ключом может быть любой тип (число, символ, boolean), но при этом он неявно преобразуется в строку.
На практике это означает:
- В JSON-файле или строке ключ всегда записывается в двойных кавычках:
{"name": "value"}. - Одинарные кавычки или ключи без кавычек - синтаксическая ошибка.
- Числовые ключи вроде
{1: "one"}в JSON невалидны, хотя в JavaScript такой объект создастся с ключом"1". - После
JSON.parseвсе ключи результирующего объекта - строки. Даже если исходный JSON содержал{"1": "one"}, доступ будет черезobj["1"], а неobj[1](хотяobj[1]тоже сработает из-за приведения типов в JS).
На практике
При работе с API и хранении данных важно помнить, что ключи JSON всегда строки. Это влияет на:
- Сортировку: строковые ключи сортируются лексикографически, поэтому
"10"будет идти перед"9". - Сериализацию:
JSON.stringifyпреобразует числовые ключи объекта в строки автоматически. - Безопасность: ключи могут содержать любые Unicode-символы, включая пробелы и спецсимволы, что требует экранирования.
- Производительность: доступ к свойствам по строковым ключам в V8 оптимизирован, но динамические ключи могут привести к деоптимизации.
Пример кода
JAVASCRIPT// Валидный JSON - ключи только строкиconst jsonString = '{"name": "Alice", "age": 30, "isAdmin": true}';// Невалидный JSON - числовой ключ без кавычекconst invalidJson = '{1: "one"}'; // SyntaxError при JSON.parse// Числовые ключи в JS-объектеconst obj = { 1: "one", true: "yes" };console.log(Object.keys(obj)); // ["1", "true"] - всё строки// JSON.stringify преобразует ключиconst result = JSON.stringify({ 2: "two", false: "no" });console.log(result); // {"2":"two","false":"no"}// Доступ после парсингаconst parsed = JSON.parse('{"1": "one"}');console.log(parsed["1"]); // "one"console.log(parsed[1]); // "one" - из-за приведения типов
Как отвечать на собеседовании
Начни с прямого ответа: "только строки". Затем кратко объясни разницу между JSON и JavaScript-объектами. Упомяни, что при парсинге все ключи становятся строками, и приведите пример с числовым ключом. Если спросят про edge cases, расскажи про экранирование спецсимволов и Unicode. Не углубляйся в сортировку или производительность, если не попросят - это темы для senior-уровня.
Что проверяет интервьюер
Интервьюер оценивает:
- Понимание формата JSON как строгого стандарта, а не просто "как в JS".
- Знание поведения
JSON.parseиJSON.stringifyпри работе с ключами. - Умение отличать синтаксис JSON от синтаксиса JavaScript-объектов.
- Внимательность к деталям: например, что
{"1": "one"}валиден, но ключ остаётся строкой.
Типичные ошибки
- Утверждение, что ключи могут быть числами или булевыми значениями - это неверно для JSON.
- Путаница между JSON и JavaScript-объектами: в JS ключи всегда строки (или символы), но в JSON это требование явное.
- Забывают, что одинарные кавычки в JSON недопустимы.
- Считают, что
JSON.parse('{"1": "one"}')создаст числовой ключ - на самом деле ключ строковый. - Не упоминают, что
JSON.stringifyавтоматически приводит ключи к строкам, что может быть неочевидно при работе с числовыми ключами.
> Похожие задачи по frontend
Как реализовать в HTTP заголовках сервис, который принимает JSON и отвечает текстом
Как реализована отправка JSON в API
Писали ли проверки для JSON схемы, чтобы проверить наличие и порядок элементов в ответе
Как работает JSON и как передается информация с его помощью?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью