Что представляют собой эти форматы данных?

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

Формат Как записываются данные Где встречается
JSON Объекты в фигурных скобках, списки в квадратных, текст в двойных кавычках Web API и настройки приложений
YAML Строки ключ: значение с отступами, элементы списка начинаются с - Файлы Docker Compose, Kubernetes и конвейеров CI
XML Элементы в тегах, у которых могут быть атрибуты Документы, RSS-ленты и веб-службы SOAP
TOML Строки ключ = значение под заголовками [таблица] Файлы конфигурации, например Cargo.toml и pyproject.toml
TOON Строки с отступами, списки записей оформлены как строки под полями Структурированные данные, передаваемые языковым моделям ИИ
CSV Строка заголовка, затем по одной строке на запись, значения разделены запятыми Электронные таблицы и экспорт баз данных
TSV Как CSV, но значения разделены табуляцией Ячейки, скопированные из электронной таблицы
MessagePack Двоичные данные, представленные здесь в виде шестнадцатеричных байтов Компактные сообщения между программами
JSON5 JSON, в котором также допускаются комментарии, одинарные кавычки и ключи без кавычек Файлы конфигурации, написанные вручную
JSONL По одному значению JSON в строке; также называется JSON Lines или NDJSON Журналы и наборы данных
INI Строки ключ = значение под заголовками [раздел] Файлы настроек программ, например php.ini
Properties Строки ключ = значение с ключами, содержащими точки Приложения Java, например файлы application.properties в Spring Boot

Описание инструмента

Этот инструмент преобразует данные между 12 форматами: JSON, YAML, XML, TOML, TOON, CSV, TSV, MessagePack, JSON5, JSONL, INI и Java Properties. Все конвертеры форматов данных здесь работают одинаково: от универсального конвертера форматов данных до конвертеров для отдельных пар форматов, например JSON в YAML, CSV в JSON или XML в JSON. При открытии в инструменте уже выбраны форматы, указанные в его названии, а в меню «Источник» и «Цель» можно выбрать любые другие. Вставьте или введите данные, и результат будет появляться по мере ввода в редакторе кода с подсветкой синтаксиса — его можно сразу скопировать. Кнопка обмена меняет направление преобразования и делает результат новыми входными данными.

Если входные данные некорректны для исходного формата, сообщение об ошибке укажет, что именно не так, обычно с номером строки и столбца, где возникла проблема.

Данные преобразуются в браузере и никуда не загружаются.

Пример

Этот JSON:

{
  "users": [
    { "id": 1, "name": "Ann", "admin": true },
    { "id": 2, "name": "Bo", "admin": false }
  ]
}

преобразуется в этот YAML:

users:
  - id: 1
    name: Ann
    admin: true
  - id: 2
    name: Bo
    admin: false

в этот CSV, где каждая строка соответствует одному пользователю:

id,name,admin
1,Ann,true
2,Bo,false

и в этот TOON:

users[2]{id,name,admin}:
  1,Ann,true
  2,Bo,false

Как форматы соотносятся друг с другом

Форматы поддерживают разные типы данных, поэтому при некоторых преобразованиях действуют следующие правила:

  • CSV и TSV хранят таблицу. В первой строке указаны названия столбцов, а каждая последующая строка становится объектом. Вложенные объекты превращаются в столбцы, названные по пути к ним, а списки в ячейках записываются как текст JSON. Например, {"name": "Ann", "address": {"city": "Oslo"}, "tags": ["a", "b"]} преобразуется в столбцы name, address.city и tags. При обратном преобразовании эти столбцы снова становятся вложенными объектами и списками. Если данные представляют собой объект с одним списком, например {"users": [...]}, строки соответствуют элементам этого списка, а список списков преобразуется в строки без заголовка.
  • Текстовые значения: CSV, TSV, XML, INI и Properties хранят только текст, поэтому конвертеры преобразуют true и false в логические значения, а числа, записанные в обычном виде, например 42 или 3.5, — в числа. Значения вроде 007, 1.50 или 1e3 остаются текстом, чтобы почтовые индексы и номера версий сохраняли исходный вид.
  • Атрибуты XML становятся ключами с префиксом @, а текст элемента с атрибутами — значением #text: <price currency="USD">44.95</price> преобразуется в {"@currency": "USD", "#text": 44.95}. Повторяющиеся элементы становятся списком. При преобразовании в XML ключи с префиксом @ снова становятся атрибутами. Если объект содержит один ключ, значением которого не является список, он становится корневым элементом. Остальные данные помещаются в элемент <root>, а каждый элемент списка верхнего уровня — в элемент <item>. Символы, недопустимые в именах XML, например пробелы, заменяются на _.
  • TOML, INI и Properties могут хранить только именованные значения на верхнем уровне, поэтому список записывается под именем items, а отдельное значение — под именем value. В TOML нет значения null, поэтому такие значения пропускаются.
  • INI записывает вложенные объекты как разделы, например [server.ssl], списки значений — как строки ключ[] = значение, а списки объектов — как разделы, названные по позиции элемента, например [users.0].
  • В Properties вложенные имена объединяются точками, а элементы списков нумеруются в квадратных скобках, например app.hosts[0], как это делает Spring Boot. При преобразовании в YAML или JSON такие ключи становятся вложенными объектами и списками, поэтому файл application.properties преобразуется в структуру файла application.yml. Символы за пределами Latin-1 записываются в виде escape-последовательностей \u.
  • В результатах YAML текст заключен в кавычки, если читатели YAML 1.1 могут принять его за что-то другое, например за on, yes или дату. Это позволяет читателям YAML 1.1 и YAML 1.2 получать одинаковые данные. Файл YAML с несколькими документами, разделенными ---, преобразуется в список этих документов, а merge-ключи << раскрываются.
  • MessagePack — двоичный формат, поэтому инструменты читают и записывают его как шестнадцатеричные байты: {"a": 1} — это 81 A1 61 01. Во входных данных допускаются пробелы, запятые и префикс 0x перед каждым байтом. Несколько сообщений, записанных подряд, становятся списком.
  • В результатах JSONL каждый элемент списка записывается на отдельной строке.
  • Целые числа, слишком большие для числового типа JavaScript, например 64-битные идентификаторы, сохраняются полностью, без потери цифр.
  • Даты и время TOML, а также временные метки MessagePack преобразуются в текст, например 1979-05-27T07:32:00Z.

Советы

  • Чтобы преобразовать ячейки электронной таблицы, скопируйте их и вставьте как TSV: приложения для работы с таблицами копируют ячейки в виде текста, разделенного табуляцией.
  • CSV и TSV подходят для данных, представляющих собой список однотипных записей. Вложенные данные удобнее читать в YAML, TOML или TOON.
  • Комментарии в файлах YAML, XML, TOML, JSON5, INI и Properties не сохраняются, поскольку конвертеры переносят только данные.