Научные данные JSON (.json)
RFC СтандартJavaScript Object Notation (JSON): легкий, удобочитаемый текстовый формат для обмена данными, не зависящий от языка программирования и широко используемый в веб-API.
Конвертировать из JSON в HTML
Бесплатный конвертер из JSON в HTML прямо в браузере. Конвертируйте файлы мгновенно на Вашем устройстве.
Сжатие JSON онлайн
Конфиденциально - файлы никогда не покидают ваше устройство
Анализ и метаданные
Операционные системы и анализаторы файлов идентифицируют файлы JSON по начальной двоичной последовательности байтов:
Сигнатура заголовка на уровне байтов (Magic Bytes)
Операционные системы и анализаторы файлов идентифицируют файлы JSON по начальной двоичной последовательности байтов:
HEX-СИГНАТУРА (СМЕЩЕНИЕ 0):
7B or 5BПРЕДСТАВЛЕНИЕ ASCII: { or [
Стандартизация: RFC 8259 / ECMA-404 / ISO/IEC 21778
Технические спецификации
| Архитектура контейнера | Легковесный, текстовый, независимый от языка программирования формат обмена данными |
| Сжатие | Текстовое сжатие Gzip / Brotli / Zstandard (обычно достигается коэффициент 80%-90%) |
| Порядок байтов (Endianness) | Юникод в кодировке UTF-8 (маркер порядка байтов / BOM не рекомендуется) |
| Цветовые пространства | Неприменимо |
| Каналы и структура | Шесть базовых типов данных: объект, массив, строка, число, булево значение, null |
| Максимальные размеры | Не ограничены; ограничения связаны только с памятью парсера и максимальной длиной строки |
| Прозрачность | Неприменимо |
| Потоковая передача и прогрессивная загрузка | NDJSON (Newline Delimited JSON) / JSON Lines позволяет постепенно обрабатывать поток данных. |
Техническая матрица сравнения: JSON с конкурентами
| Технический атрибут | JSON (Текущий) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Сложность синтаксиса | Минимальная (6 типов, строгий синтаксис) | Высокая (на основе отступов, сложная спецификация) | Высокая (многословные закрывающие теги, пространства имен) | Бинарный формат сериализации, задаваемый схемой |
| Скорость разбора | Чрезвычайно высокая во всех современных языках | Низкая (сложный анализ отступов) | От умеренной до низкой (сложное создание DOM) | Ультравысокая (бинарная десериализация без копирования) |
| Поддержка комментариев | Нет (намеренно исключено для предотвращения разрастания метаданных) | Да (комментарии с символом #) | Да (<!-- комментарии -->) | Да в файлах .proto |
| Размер сетевых данных | Компактный текст (очень высокий коэффициент сжатия при Gzip) | Компактный текст | Многословный текст (многократное повторение тегов) | Сверхкомпактный двоичный формат |
Распространенные сценарии повреждения и руководство по восстановлению в HEX
SyntaxError: неожиданный токен , в JSON в позиции X.
Первопричина: Завершающая запятая после последнего элемента в массиве или объекте, что строго запрещено в стандарте RFC 8259 JSON.
Восстановление: Удалите завершающие запятые после последних элементов объектов и массивов перед передачей данных в JSON.parse().
SyntaxError: неожиданный токен ' в JSON.
Первопричина: Строки или ключи заключены в одинарные кавычки ('') вместо двойных ("").
Восстановление: Замените все строки и ключи в одинарных кавычках на стандартные строки в двойных кавычках.
Анализ безопасности и векторы атак на парсер
JSON содержит только текст и защищен от прямого выполнения кода, но синтаксический анализ недоверенного JSON может привести к загрязнению прототипа (Prototype Pollution), ReDoS или исчерпанию памяти.
Известные векторы атак
- Загрязнение прототипа: ключи с именем '__proto__' или 'constructor' изменяют Object.prototype в приложениях JavaScript.
- Отказ в обслуживании из-за переполнения стека с помощью глубоко вложенных структур JSON (например, 10 000 открывающих скобок).
- Потеря точности чисел: числа JavaScript больше 2^53: 1 (9 007 199 254 740 991) неявно теряют точность.
Лучшие практики защиты: Никогда не выполняйте JSON с помощью eval(). Используйте JSON.parse() и очищайте свойства '__proto__' в функциях рекурсивного слияния объектов.
История происхождения и ключевые этапы
Ключевые преимущества и плюсы
- Удобочитаемая, самоописывающаяся и лаконичная структура текста.
- Встроенная поддержка разбора данных в движках JavaScript (JSON.parse) и всех основных языках программирования.
- Строгая спецификация предотвращает произвольное выполнение кода.
Технические ограничения и минусы
- Отсутствие поддержки комментариев, завершающих запятых или циклических ссылок на объекты.
- Отсутствие встроенных двоичных типов (двоичные данные должны быть закодированы в base64, что увеличивает размер на 33%).
- Неэффективная сериализация по сравнению с бинарными форматами, такими как Protocol Buffers или MessagePack.
Интересные технические факты
- Дуглас Крокфорд добавил пункт «Программное обеспечение должно использоваться во благо, а не во зло» в лицензию оригинального инструмента JSMin для работы с JSON.
- JSON является строгим подмножеством синтаксиса JavaScript, но до ES2019 неэкранированные символы U+2028 и U+2029 были допустимы в JSON и недопустимы в строках JavaScript.
- Дуглас Крокфорд обнаружил, что ранние веб-браузеры могли напрямую преобразовывать JSON в объекты с помощью нативного eval() в JavaScript до того, как специализированные API JSON.parse() были стандартизированы в ECMAScript 5.
Часто задаваемые технические вопросы
Почему в JSON не разрешены комментарии?
Грамматика JSON не допускает комментарии. Реализации могут по-разному обрабатывать расширения и данные, зависящие от приложения, поэтому один лишь формат не гарантирует совместимость.
Как хранить 64-битные целые числа в JSON без потери точности?
Нативный тип Number в JavaScript представляет собой число двойной точности с плавающей запятой IEEE 754, которое может точно представлять только целые числа до 2^53: 1. 64-битные целые числа (например, идентификаторы баз данных или метки времени) должны сериализоваться как строки (например, '1234567890123456789') в JSON.
В чем разница между JSON и NDJSON / JSON Lines?
Стандартный JSON заключает все данные в один корневой объект или массив, поэтому парсеру нужно загрузить весь текст в память перед его обработкой. NDJSON (Newline Delimited JSON) разделяет отдельные корректные записи JSON символами новой строки (\n), позволяя эффективно использовать память при построчной обработке огромных наборов данных размером в несколько гигабайт.
Связанные конвертации для JSON
Конвертация данных JSON в исходный код HTML преобразует структурированные пары «ключ-значение» в удобочитаемые веб-документы, готовые для отрисовки в браузере.
Конвертация исходного кода HTML в данные JSON преобразует удобочитаемые веб-документы в структурированные пары «ключ-значение» для программной обработки и импорта в API.
Преобразование текстового скрипта дампа SQL в экспорт данных JSON превращает жесткие таблицы реляционной базы данных в гибкие вложенные объекты для современных веб-приложений.
Преобразование неструктурированных текстовых файлов JSON в структурированные реляционные базы данных SQLite позволяет быстро индексировать большие массивы данных и выполнять по ним запросы.
Конвертация файлов Adobe Swatch Exchange в структуру JSON с данными о цветах преобразует бинарные палитры дизайна в читаемые текстовые объекты для современных веб-приложений.
Конвертация текстовых данных Color JSON в бинарные образцы Adobe ASE объединяет веб-токены дизайна и профессиональные приложения для настольной верстки.
Преобразование текстовых файлов палитры GIMP в структуры Color JSON позволяет веб-приложениям напрямую считывать цветовые образцы без сложных сценариев синтаксического анализа.
Преобразование структурированных файлов Color JSON в CSS-переменные превращает объекты исходных данных в встроенные средства стилизации для веб-сайтов.