YamlBox

YAML инструменты · 5 минута чтения

От JSON до YAML: снова делаем машинный вывод доступным для

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

Обновлено

Зачем вообще конвертировать JSON в YAML

Эти два формата содержат идентичные данные, но оптимизируются для разных читателей. JSON тратит символы на фигурные скобки, запятые и кавычки; YAML тратит их на структуру, за которой глаз может следить как углубление. Для данных, которые генерируются и потребляются программами, выигрывает JSON. Для данных, которые редактирует человек — значений Helm, определений CI, инвентаризаций Ansible, Docker Compose файлов – побеждает YAML, поэтому это направление возникает всякий раз, когда сгенерированным данным нужен владелец-человек.

Комментарии — это единственное, что не может выжить.

Преобразование может восстановить читабельность, но не может восстановить намерение: в источнике JSON не было комментариев, которые можно было бы перенести. Если ваш сгенерированный файл YAML будет поддерживаться людьми, добавьте короткий комментарий к заголовку, описывающий, откуда он взялся и что его восстанавливает, чтобы никто не редактировал файл, который будет перезаписан при следующем развертывании.

Цитирую: где конвертированный YAML тихо ломается

YAML рассматривает несколько простых слов как значения, а не как строки. Конвертер, который агрессивно отбрасывает кавычки, может изменять типы, не меняя ни одного видимого символа:

                country: NO        # parses as boolean false in YAML 1.1
version: 1.10      # parses as the number 1.1
time: 22:30        # parses as a sexagesimal integer
name: "on"         # quoted on purpose — must stay a string
              

Хороший вывод цитирует любую строку, которая может быть неправильно прочитана — `yes`/`no`/`on`/`off`, числовые идентификаторы, значения с ведущими нулями, временем и датами – вместо того, чтобы заключать в кавычки все, что создает стену пунктуации, от которой вы пытались уйти.

Отступы и многострочные строки

Два пробела являются безопасным значением по умолчанию: так предполагают Kubernetes документация, Helm шаблоны и большинство редакторов, и они выдерживают копирование и вставку между инструментами. Глубокая вложенность в четырехпространственном стиле затрудняет сканирование после шести уровней. Еще одним решением форматирования являются длинные строки: значение JSON со встроенными символами новой строки может выглядеть как экранированная однострочная строка или как блочный скаляр YAML, который читается естественным образом. Если поле представляет собой сценарий оболочки или фрагмент конфигурации, запросите форму блока.

Сортировка ключей делает различия значимыми

Порядок ключей объекта JSON не имеет значения, поэтому преобразователи могут изменять порядок. Сортировка ключей по алфавиту обеспечивает четкое различие восстановленных файлов: без нее измененный порядок развертывания отображается как перезапись всего файла. Если вы отслеживаете сгенерированный YAML в git, сортировка — это разница между однострочной разницей и двухсотстрочной.

Держите поездку туда и обратно в одном месте

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

от JSON до YAML — часто задаваемые вопросы

Сохранит ли преобразованный YAML порядок ключей?

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

Почему тип значения изменился после преобразования JSON в YAML?

Голые скаляры в YAML переинтерпретируются: `no`, `on` и `off` могут стать логическими значениями, а такие значения, как `1.10`, могут стать числами. Безопасный конвертер цитирует строки, которые в противном случае были бы неправильно прочитаны. Если поле должно оставаться строкой, заключите его в кавычки в YAML.

Могу ли я преобразовать JSON в YAML в автономном режиме?

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

Инструменты, упомянутые в этом посте

Просмотрите полный список инструментов 19

Еще статьи для чтения

Все 19 публикации →