Научные данные JSON (.json)

RFC Стандарт

JavaScript Object Notation (JSON): легкий, удобочитаемый текстовый формат для обмена данными, не зависящий от языка программирования и широко используемый в веб-API.

Конвертировать из JSON в HTML

Бесплатный конвертер из JSON в HTML прямо в браузере. Конвертируйте файлы мгновенно на Вашем устройстве.

Сжатие JSON онлайн

Конфиденциально - файлы никогда не покидают ваше устройство

Анализ и метаданные

Операционные системы и анализаторы файлов идентифицируют файлы JSON по начальной двоичной последовательности байтов:

Выберите или перетащите файлы сюда

Конфиденциально - файлы никогда не покидают ваше устройство

или вставьте Ctrl+V
Гарантия конфиденциальности без передачи по сети: 0 байт загружено на внешние серверы. Вся обработка выполнялась локально в песочнице Вашего браузера.

Сигнатура заголовка на уровне байтов (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 (Текущий)YAMLXMLProtocol 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__' в функциях рекурсивного слияния объектов.

История происхождения и ключевые этапы

2017RFC 8259 стандартизирует UTF-8 в качестве единственной обязательной кодировки символов для JSON.
2013ECMA-404 определяет синтаксис JSON, который используется во многих языках программирования и на разных платформах.
2001Дуглас Крокфорд определяет JSON, чтобы обеспечить обмен данными между браузером и сервером без сохранения состояния.

Ключевые преимущества и плюсы

  • Удобочитаемая, самоописывающаяся и лаконичная структура текста.
  • Встроенная поддержка разбора данных в движках 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

Конвертация данных JSON в исходный код HTML преобразует структурированные пары «ключ-значение» в удобочитаемые веб-документы, готовые для отрисовки в браузере.

HTML в JSON

Конвертация исходного кода HTML в данные JSON преобразует удобочитаемые веб-документы в структурированные пары «ключ-значение» для программной обработки и импорта в API.

SQL в JSON

Преобразование текстового скрипта дампа SQL в экспорт данных JSON превращает жесткие таблицы реляционной базы данных в гибкие вложенные объекты для современных веб-приложений.

JSON в SQLITE

Преобразование неструктурированных текстовых файлов JSON в структурированные реляционные базы данных SQLite позволяет быстро индексировать большие массивы данных и выполнять по ним запросы.

ASE в JSON

Конвертация файлов Adobe Swatch Exchange в структуру JSON с данными о цветах преобразует бинарные палитры дизайна в читаемые текстовые объекты для современных веб-приложений.

JSON в ASE

Конвертация текстовых данных Color JSON в бинарные образцы Adobe ASE объединяет веб-токены дизайна и профессиональные приложения для настольной верстки.

GPL в JSON

Преобразование текстовых файлов палитры GIMP в структуры Color JSON позволяет веб-приложениям напрямую считывать цветовые образцы без сложных сценариев синтаксического анализа.

JSON в CSS

Преобразование структурированных файлов Color JSON в CSS-переменные превращает объекты исходных данных в встроенные средства стилизации для веб-сайтов.