Какие типы данных допустимы для ключей в JSON?

Ответ

Согласно официальной спецификации RFC 8259, ключом в объекте JSON может быть только строка (string), заключённая в двойные кавычки (").

✅ Валидный JSON:

{
  "username": "alice",
  "age": 30,
  "is_active": true
}

❌ Недопустимые ключи (нарушают спецификацию):

  • Числа: { 42: "answer" }
  • Булевы значения: { true: "yes" }
  • null: { null: "empty" }
  • Объекты или массивы: { {"key": "sub"}: "value" }

Важное замечание: Некоторые языки (например, JavaScript) при парсинге JSON могут неявно приводить неквотированные ключи к строкам, но это поведение нестандартно. Для гарантированной совместимости всегда используйте строки в двойных кавычках.

// JavaScript может «простить» отсутствие кавычек, но это не валидный JSON
const obj = { key: "value" }; // Это объект JS, а не JSON-строка
const jsonString = JSON.stringify(obj); // Преобразуется в '{"key":"value"}'

Ответ 18+ 🔞

А, слушай, тут один тип пытался мне впарить, что в JSON можно ключи как угодно писать — числами там, булевыми значениями, да хоть null суй. Так вот, это пиздеж собачий, полнейший!

По канонам, по этим самым священным RFC 8259, ключом в объекте JSON может быть только строка, и точка! И эта строка должна быть в двойных кавычках, как порядочная, а не голышом бегать.

✅ Вот так правильно, блядь:

{
  "username": "alice",
  "age": 30,
  "is_active": true
}

Всё чинно, благородно, ключи в кавычках, как в гробу.

❌ А вот это — чистой воды распиздяйство и нарушение всех мыслимых конвенций:

  • Числа как ключи? { 42: "answer" } — хуй тебе, а не ключ.
  • Булевы значения? { true: "yes" } — да иди ты нахуй со своим true.
  • null? { null: "empty" } — ой, ну ёпта, это вообще за гранью.
  • Объекты или массивы в качестве ключа? { {"key": "sub"}: "value" } — это уже клиника, блядь, вызывайте санитаров.

Но тут, сука, есть подвох! Некоторые языки, взять того же JavaScript, они же всепрощающие, как мать Тереза. Могут они этот неформат проглотить и даже не поперхнуться, неявно превратив твой кривой ключ в строку.

// JavaScript может и простить, но это не делает твой уродец валидным JSON, понял?
const obj = { key: "value" }; // Это объект в JS, а не строка JSON!
const jsonString = JSON.stringify(obj); // А вот тут он уже причёсывается и выдаёт '{"key":"value"}'

Так что не ведись на эту хуйню! Если хочешь, чтобы твой JSON везде понимали, а не только в твоём кривом парсере, — заключай ключи в кавычки, ебать его в сраку! И не выёбывайся.