Форматы данных: JSON, YAML, XML, CSV и бинарные форматы
Синтаксис, расширения, MIME-типы, назначение и ограничения текстовых, табличных и бинарных форматов.
Синтаксис, MIME-тип и назначение
Нажмите на пример, расширение или MIME-тип, чтобы скопировать значение. Бинарные примеры показаны шестнадцатеричными байтами.
| Формат | Пример | Расширение и MIME | Когда использовать |
|---|---|---|---|
| Структурированный текстЧитаемые форматы для API, документов и конфигурации. | |||
| JSON APIстрогий синтаксис | | Практический стандарт для веб-API и обмена между приложениями: объекты, массивы и небольшой набор типов.Учтите: Комментарии, завершающие запятые, NaN и Infinity не входят в JSON. | |
| YAML конфигурациякомментарии | | Выразительный формат для конфигурации и документов, рассчитанный на ручное чтение и редактирование.Учтите: Отступы значимы; правила типов и поддерживаемые возможности зависят от версии парсера. | |
| TOML конфигурацияявные типы | | Предсказуемый формат конфигурации с явными строками, числами, датами, массивами и таблицами.Учтите: Хорош для настроек, но менее удобен для глубоко вложенных документов и потоков данных. | |
| XML документысхемы | | Расширяемая разметка для документов и интеграций, где нужны атрибуты, пространства имён и развитые схемы.Учтите: Парсинг сложнее и многословнее; внешние сущности должны быть отключены для недоверенных данных. | |
| Таблицы и потокиПлоские записи, экспорты и обработка данных построчно. | |||
| CSV таблицыExcel | | Распространённый обмен табличными данными со строками-записями и полями, разделёнными запятыми.Учтите: Заранее согласуйте разделитель, кодировку, наличие заголовка и экранирование кавычками. | |
| TSV таблицытабуляция | | Таблица с полями, разделёнными табуляцией; удобна, когда в значениях часто встречаются запятые.Учтите: Табуляции и переводы строк внутри значений всё равно требуют согласованных правил экранирования. | |
| JSON Lines / NDJSON логипотоки | MIME-тип пока не стандартизован | Каждая строка — самостоятельное значение JSON, поэтому записи можно читать, дописывать и передавать по одной.Учтите: Пустая строка не является записью; используйте UTF‑8 и отделяйте каждое значение переводом строки. | |
| Компактные бинарные форматыМеньше трафика и быстрее разбор, но нужен специализированный декодер. | |||
| CBOR бинарныйбез схемы | | Стандартизованное компактное бинарное представление с типами, тегами и возможностью декодировать данные без внешней схемы.Учтите: Байты не читаются вручную; для подписей и хешей отдельно согласуйте детерминированное кодирование. | |
| Protocol Buffers бинарныйсхема | | Схемная сериализация с числовыми идентификаторами полей, компактными сообщениями и генерацией кода для разных языков.Учтите: Для декодирования нужна совместимая схема; номера полей нельзя переиспользовать после удаления. | |
| MessagePack бинарныйбез схемы | Распространённый, но не зарегистрированный IANA тип | Компактная бинарная сериализация с моделью данных, похожей на JSON, и расширяемыми пользовательскими типами.Учтите: Нет единого зарегистрированного MIME-типа; расширения и дополнительные типы нужно согласовать между сторонами. | |
Начинайте с задачи, а не с синтаксиса
- Публичный веб-APIJSON
- Широкая поддержка, предсказуемый синтаксис и зарегистрированный MIME-тип.
- Настройки для человекаTOML или YAML
- TOML удобен для явных настроек, YAML — для более сложной структуры документа.
- Сложные документыXML
- Выбирайте, когда важны пространства имён, смешанное содержимое, подписи или зрелые схемы.
- Экспорт таблицCSV или TSV
- До обмена согласуйте разделитель, кодировку, заголовок, переводы строк и экранирование.
- Логи и потокиJSON Lines
- Одно независимое значение JSON в строке можно дописывать и обрабатывать постепенно.
- Компактная передачаCBOR, Protobuf или MessagePack
- Protobuf подходит для контракта со схемой, CBOR и MessagePack — для самоописываемых значений.
JSON, YAML 1.2.2, TOML 1.0.0, XML 1.0, CSV, JSON Lines, CBOR, Protocol Buffers и MessagePack.
Продолжите работу с текстом
Скопируйте символ, преобразуйте разметку, очистите фрагмент или сохраните результат в блокноте.
- Кодировать и декодировать HTML-сущности Преобразуйте спецсимволы в безопасные HTML-сущности и обратно.
- Конвертировать Markdown в HTML Подготовьте HTML-разметку из Markdown-черновика.
- Удалить HTML-теги Оставьте читаемый текст без разметки.
- Изменить регистр текста Переведите буквы в верхний или нижний регистр.
- Открыть онлайн-блокнот Используйте скопированные символы в локальной заметке.
Вопросы о форматах данных
Какой формат выбрать для нового API?
JSON — безопасный вариант по умолчанию для публичного HTTP API благодаря почти повсеместной поддержке и стандартному MIME-типу. Бинарный формат оправдан, когда обе стороны контролируют контракт, а размер или скорость важнее дополнительной сложности.
Правда ли, что YAML — надмножество JSON?
YAML 1.2 проектировался так, чтобы документы JSON принимались как YAML, но версия парсера и детали реализации всё равно важны. Нельзя ожидать от каждого парсера YAML 1.1 поведения YAML 1.2.
Почему один CSV по-разному открывается в разных программах?
В экосистеме CSV различаются разделитель, десятичный знак, кодировка, переводы строк и определение заголовка. RFC 4180 описывает распространённый вариант, а не все существующие диалекты.
Чем JSON Lines отличается от массива JSON?
В JSON Lines каждое значение находится на отдельной строке, поэтому файл удобно дописывать и читать потоком. Весь документ не является одним массивом JSON и разбирается запись за записью.
Делает ли бинарный формат данные безопасными?
Нет. Бинарная сериализация может уменьшить размер и стоимость разбора, но сама по себе не даёт шифрования, аутентификации, валидации или безопасных ограничений ресурсов.