Какие типы данных можно хранить в JSON?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы данных в 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, конфигурационных файлов и обмена данными между клиентом и сервером благодаря своей простоте, широкой поддержке и независимости от языка программирования. Однако его ограниченная система типов требует внимательности при работе со сложными структурами данных.