← Назад к вопросам

Какие типы данных можно хранить в JSON?

2.0 Middle🔥 161 комментариев
#JavaScript Core#Браузер и сетевые технологии

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы данных в JSON (JavaScript Object Notation)

JSON — это текстовый формат для представления структурированных данных, основанный на синтаксисе JavaScript. Он предназначен для легкого чтения и написания людьми, а также для эффективной обработки программами. Формат JSON строго регламентирован стандартом ECMA-404 и RFC 8259, поэтому поддерживаемые типы данных фиксированы и ограничены.

Основные (первичные) типы данных

JSON поддерживает шесть базовых типов данных:

1. Строки (String)

  • Представляются в двойных кавычках "".
  • Поддерживают Unicode, включая escape-последовательности для специальных символов (\n, \t, \", \uXXXX).
"Это строка с символом новой строки \n и кавычкой \" внутри"

2. Числа (Number)

  • Представляются в формате с плавающей точкой (целые и дробные).
  • Не поддерживают специальные значения типа NaN, Infinity.
-42, 3.14159, 1.0e-10

3. Логические значения (Boolean)

  • Только два значения: true и false.
true
false

4. null

  • Специальное значение для обозначения отсутствия данных.
null

5. Объекты (Object)

  • Коллекция пар ключ-значение, заключенная в фигурные скобки {}.
  • Ключи всегда являются строками.
  • Значения могут быть любым допустимым типом JSON (включая другие объекты или массивы).
{
  "name": "Иван",
  "age": 30,
  "isActive": true,
  "address": {
    "city": "Москва"
  }
}

6. Массивы (Array)

  • Упорядоченный список значений, заключенный в квадратные скобки [].
  • Значения могут быть любым допустимым типом JSON, типы в массиве могут смешиваться.
[1, "текст", false, null, {"key": "value"}]

Типы данных, которые НЕЛЬЗЯ хранить напрямую в JSON

JSON является строго типизированным и ограниченным форматом. Следующие типы данных, распространенные в JavaScript и других языках, не поддерживаются:

  • Функции (Function), методы или код.
  • Дата и время (Date) — должны быть представлены как строки (например, в ISO 8601) или числами (timestamp).
  • Регулярные выражения (RegExp).
  • Символы (Symbol).
  • undefined (в отличие от null).
  • Бинарные данные (например, ArrayBuffer, Blob) — для передачи требуют преобразования (Base64 encoding в строку).
  • Числа в специальных форматах: NaN, Infinity, -Infinity.
  • Комментарии — формат JSON не допускает комментарии внутри файла.

Практические примеры преобразования сложных типов

В реальных приложениях сложные типы часто сериализуются в JSON-совместимые форматы:

// Преобразование Date в строку ISO для JSON
const data = {
  event: "Meeting",
  timestamp: new Date().toISOString() // "2023-10-05T14:30:00.000Z"
};

// Преобразование бинарных данных в Base64 строку
const buffer = new Uint8Array([1, 2, 3]);
const base64String = btoa(String.fromCharCode(...buffer));
const jsonData = { binaryData: base64String };

// Сериализация объекта с функциями требует специальной обработки
const objWithMethod = {
  name: "Test",
  calculate() { return 42; }
};
// НЕЛЬЗЯ просто использовать JSON.stringify(objWithMethod)

Важные ограничения и особенности

  • Циклические ссылки — JSON.stringify() выдаст ошибку при попытке сериализации объекта с циклическими ссылками.
  • Порядок ключей в объектах — хотя порядок пар ключ-значение в сериализованном JSON может сохраняться, стандарт не гарантирует его сохранение при парсинге в других языках.
  • Числовая точность — большие числа или числа с высокой точностью могут теряться при передаче между разными системами.

JSON остается фундаментальным форматом для Web API, конфигурационных файлов и обмена данными между клиентом и сервером благодаря своей простоте, широкой поддержке и независимости от языка программирования. Однако его ограниченная система типов требует внимательности при работе со сложными структурами данных.