Перейти к содержимому
LeedyBox
Поддержать

Конвертация между JSON, CSV и YAML

JSON, CSV и YAML часто могут хранить одни и те же данные, но не соответствуют друг другу один к одному. В этом руководстве объясняется, в чём сильные стороны каждого формата, какие детали могут измениться при конвертации и как проверить результат.

В чём сильные стороны каждого формата

JSON — распространённый формат для веб-API и конфигураций, которые читают программы. У него небольшой и понятный набор типов: объекты, массивы, строки, числа, логические значения и null. Строгий синтаксис упрощает разбор для программ, но комментариев в JSON нет.

CSV — это таблица: одна строка файла на запись, одно значение на столбец. Электронные таблицы, базы данных и инструменты отчётности легко его импортируют, а для больших плоских наборов данных он компактен. Стандартного способа описать типы данных или вложенные структуры в нём нет.

YAML создан для того, чтобы его писали и читали люди. Он популярен для файлов конфигурации, потому что допускает комментарии, использует отступы вместо скобок и может описывать те же структуры, что и JSON. Но гибкий синтаксис означает и то, что небольшие ошибки в отступах или кавычках могут изменить смысл.

Возможность JSON CSV YAML
Вложенные объекты и массивы Да Нет (плоская таблица) Да
Типы данных Строка, число, логическое значение, null Только текст Определяются по значению
Комментарии Нет Нет Да
Типичное применение API, данные приложений Электронные таблицы, импорт Файлы конфигурации

В CSV вложенность разворачивается

В файле CSV есть только строки и столбцы, поэтому вложенные данные приходится преобразовывать. Распространены два подхода. Первый разворачивает структуру в имена столбцов вроде address.city и address.zip. Второй сохраняет вложенную часть как строку JSON в одной ячейке. Конвертер данных LeedyBox поддерживает оба варианта.

У обоих подходов есть недостатки. Развёрнутые столбцы легко читать в электронной таблице, но массивы разной длины дают много полупустых столбцов. Строки JSON в ячейках сохраняют структуру, но их сложнее редактировать вручную. Если позже вы будете конвертировать данные обратно в JSON, проверьте, что структура совпадает с исходной.

В CSV типы становятся текстом

CSV хранит каждое значение как текст. Число 42, строка "42" и логическое значение true выглядят в ячейке одинаково. Когда файл CSV читают обратно, программе приходится угадывать — или получать указание, — какие столбцы содержат числа или даты. Конвертер LeedyBox читает значения CSV как текст, поэтому числа из файла CSV попадают в JSON как строки, если вы их не измените.

Приложения электронных таблиц добавляют собственные догадки: они могут удалять ведущие нули из почтовых индексов или номеров телефонов, превращать длинные числа в экспоненциальную запись или распознавать значения как даты. Ячейки, начинающиеся с =, +, - или @, могут восприниматься как формулы; для вывода CSV в конвертере есть необязательная настройка защиты от формул Excel.

Комментарии и типы в YAML

В JSON нет комментариев, поэтому при конвертации YAML в JSON они теряются. Обратная конвертация их не восстанавливает. Если комментарии важны, сохраните исходный файл YAML.

YAML определяет типы по значениям без кавычек. По старым правилам YAML 1.1, которые используют некоторые парсеры, такие слова, как no, yes, on и off, становятся логическими значениями, поэтому код страны вроде NO может превратиться в false. Значения вроде 2026-10-02 могут стать объектами даты, а 1e3 или 010 — прочитаться как числа. Конвертер LeedyBox читает YAML по основной схеме (core schema) YAML 1.2, которая оставляет no и даты текстом, но другие инструменты, читающие ваш файл, могут вести себя иначе. Самая безопасная привычка — заключать в кавычки значения, которые должны остаться текстом.

Большие числа в JavaScript

JavaScript хранит числа как 64-битные значения с плавающей точкой. Не все целые числа больше 9 007 199 254 740 991 (253 − 1) можно представить точно, поэтому большой идентификатор вроде 12345678901234567891 при разборе может быть незаметно округлён. Это касается любого браузерного конвертера, включая этот, — он показывает предупреждение, когда обнаруживает такие числа. Идентификаторы из баз данных и другие длинные идентификаторы надёжнее хранить как строки.

Проверка результата

Конвертация, которая даёт корректный по синтаксису результат, не обязательно верна. Прежде чем использовать результат:

  • Сравните количество строк или элементов с исходными данными.
  • Выборочно проверьте несколько записей, в том числе с пустыми значениями, специальными символами, переносами строк или вложенными данными.
  • Проверьте столбцы, которые в целевой системе должны быть числами, логическими значениями или датами.
  • Поищите длинные числа, которые могли быть округлены.
  • Проверьте результат в программе, которая будет его читать, сначала на копии данных.

Сравнить исходный файл с результатом конвертации туда и обратно поможет инструмент Сравнение текста.

Часто задаваемые вопросы

Можно ли конвертировать JSON в CSV и обратно без изменений?

Только для простых плоских данных, и даже тогда числа и логические значения обычно возвращаются как текст. Вложенные данные и типы зависят от выбранных параметров, поэтому сравнивайте результат с оригиналом.

Почему моё значение в YAML превратилось в true или false?

Некоторые парсеры YAML считают слова без кавычек вроде yes, no, on и off логическими значениями. Заключите значение в кавычки, чтобы оно осталось текстом.

Загружаются ли мои данные на сервер при конвертации?

Конвертер данных LeedyBox работает в вашем браузере, поэтому вставленные данные обрабатываются на вашем устройстве.