ToolActToolAct

Инструмент форматирования YAML

Ввод YAML
Результат
Строк: 1Символов: 0Байт: 0
Строк: 1Символов: 0

Что такое YAML?

YAML Formatter делает YAML-файлы более читаемыми за счет единых отступов, переносов строк и видимой структуры. YAML часто используют для CI-конфигураций, Kubernetes manifests, Docker Compose, static-site generators, локализации, OpenAPI-файлов и настроек приложений. В отличие от JSON, YAML сильно зависит от отступов, маркеров списков, двоеточий, кавычек, anchors и многострочных строк; маленькая ошибка форматирования может создать другую структуру. Инструмент помогает читать, чистить и находить очевидные синтаксические проблемы, но не заменяет schema validation и проверки конкретного инструмента. Для Kubernetes, GitHub Actions, Ansible или production-конфигов результат нужно тестировать в целевой системе. Для production-данных или кодовой базы результат все равно нужно проверить parser, тестами или правилами проекта.

Инструкция по использованию

Как пользоваться

  1. Вставьте или введите YAML-данные в левое поле ввода
  2. Выберите размер отступа, соответствующий стилю вашего проекта
  3. Нажмите «Форматировать» для оформления, «Минимизировать» для сжатия или «Проверить» для проверки синтаксиса
  4. Просматривайте результаты справа
  5. Нажмите «Копировать», чтобы скопировать в буфер обмена

Описание параметров

Размер отступаВыберите отступ в 2 или 4 пробела

Горячие клавиши

  • Ctrl + EnterФорматировать
  • Ctrl + Shift + CКопировать результат

Советы по YAML

  • YAML чувствителен к отступам, поэтому проверяйте вложенные списки и словари после форматирования, прежде чем использовать результат в CI, Kubernetes или файлах развёртывания.
  • По возможности проверяйте результат по схеме целевого инструмента; синтаксически корректный YAML всё равно может быть невалидным для GitHub Actions, Docker Compose или OpenAPI.

Применение

Нормализуйте простой YAML-конфиг перед коммитомВставьте YAML приложения, сервера, базы данных, флагов функций, логирования или ролей пользователей и отформатируйте с отступом в 2 или 4 пробела. Инструмент рассчитан на повседневные структуры: пары ключ-значение, вложенные объекты, массивы, булевы значения, числа, null и строки в кавычках.
Быстро находите типичные ошибки пробелов в YAMLВстроенный валидатор отмечает строки без разделителя-двоеточия, значения без обязательного пробела после двоеточия и табуляции там, где нужны пробелы. Это позволяет поймать большинство ошибок копирования и ручного редактирования до того, как файл попадёт в парсер CI, скрипт развёртывания или страницу документации. Разбор и валидация происходят полностью в браузере, поэтому черновик манифеста с внутренними именами сервисов, неопубликованными тегами образов или тестовыми учётными данными можно привести в порядок без загрузки на удалённый валидатор.
Создайте чистый YAML-файл для скачивания из черновикаПосле разбора форматировщик перезаписывает дерево объектов в единообразный YAML и позволяет скопировать или скачать formatted.yaml. Используется лёгкий парсер, а не полноценный YAML-движок, поэтому якоря, алиасы, сложные многострочные скаляры, теги и продвинутые возможности схемы всё ещё стоит проверить средой, которая будет потреблять файл.
Конвертируйте YAML в JSON для последующего конвейераПереключите вывод на JSON, сохраняя те же настройки отступов, чтобы CI-скрипты, фильтры jq или проверки политик могли обработать файл без второго парсера. Массивы смешанных типов и строки в кавычках сохраняются, но якоря и алиасы YAML по-прежнему разворачиваются лёгким парсером.
Проверьте манифест Kubernetes или Docker Compose перед применениемВставьте deployment.yaml или docker-compose.yml, исправьте ошибки пробелов, которые отмечает валидатор, и убедитесь, что блоки apiVersion, kind и spec выровнены. Страница — это быстрый шаг для чтения и очистки, но финальный манифест всё ещё требует kubectl apply --dry-run=client или docker compose config для выявления проблем со схемой.

Технический принцип

Форматирование YAML опирается на спецификацию YAML 1.2.2 (пересмотрена в октябре 2021), которая формально определяет JSON как строгое подмножество YAML — любой корректный документ JSON разбирается как YAML. Разбор проходит в три слоя: презентационный слой сканирует кодовые точки Unicode и разрешает экранирование символов; слой сериализации строит граф узлов из скаляров, последовательностей и отображений; нативный слой применяет YAML Core Schema для приведения скаляров к разрешённым типам `!!str`, `!!int`, `!!float`, `!!bool`, `!!null`, `!!seq`, `!!map`. Распространённые библиотеки времени выполнения включают js-yaml и более новый пакет `yaml` на Node, PyYAML и ruamel.yaml на Python, SnakeYAML на JVM. Браузерные форматировщики обычно разбирают в простой JS-объект через `load`/`dump` js-yaml и выполняют обратное преобразование. Отступы — это несущий примитив: допускается только ASCII-пробел (U+0020) — спецификация явно запрещает символы табуляции (U+0009) для отступов в §6.1, поэтому вставка из редактора кода с автоконвертацией — самая частая причина ошибок разбора. Блочный стиль определяет вложенность исключительно по позиции столбца, поэтому дочерние узлы должны иметь отступ больше родительского минимум на один пробел (два по соглашению). Потоковый стиль заимствует синтаксисис JSON — `[1, 2, 3]` и `{a: 1, b: 2}` — и может вкладываться в блочный стиль для однострочных записей. Блочные скаляры используют индикаторное сворачивание: `|` (literal) сохраняет переносы строк точно, `>` (folded) сворачивает одиночные переносы строк в пробелы и сохраняет пустые строки как разделители абзацев, а индикаторы обрезки `-` (убрать завершающие переносы) и `+` (сохранить все завершающие переносы) добавляются после индикатора (`|-`, `>+`). Правила кавычек различаются: скаляры в одинарных кавычках трактуют `\` буквально и используют `''` для вставки кавычки; скаляры в двойных кавычках признают C-style экранирование (`\n`, `\t`, `\uXXXX`). Форматировщики обычно нормализуют к одному блочному стилю и переиздают якоря и алиасы. Якорь `&name` помечает узел; алиас `*name` ссылается на него; ключ слияния `<<: *name` (наследие YAML 1.1, всё ещё поддерживаемое большинством парсеров) извлекает ключи из другого отображения в текущее. Мультидокументные потоки разделяются маркерами начала `---` и необязательными маркерами конца `...` — шаблон, используемый Kubernetes для передачи нескольких ресурсов в одном манифесте. Две известные проблемы заслуживают безопасного переиздания: проблема Норвегии — неэкранированный скаляр `no` интерпретируется как `false` по схеме YAML 1.1 (и код страны становится булевым значением) — и CVE-2017-18342, когда `yaml.load` в PyYAML десериализовал произвольные объекты Python, исправленный переходом на `safe_load`. Обе причины, по которым форматировщик должен осторожно обращаться с разрешением скаляров и никогда не выполнять тегированные конструкторы. Разбор выполняется за O(n) от длины входных данных; комментарии отбрасываются большинством библиотек на основе AST, поскольку они не являются частью информационной модели YAML.

  • Спецификация: YAML 1.2.2 (окт. 2021). JSON — строгое подмножество YAML 1.2, поэтому любой корректный документ JSON разбирается как YAML; распространённые библиотеки: js-yaml, пакет `yaml`, PyYAML, ruamel.yaml, SnakeYAML.
  • Отступы должны быть ASCII-пробелом (U+0020); символы табуляции (U+0009) запрещены для отступов §6.1 — самая частая причина ошибок `mapping values are not allowed here`.
  • Блочный и потоковый стиль: блочный использует вложенность по позиции столбца (2 или 4 пробела по соглашению); потоковый использует JSON-подобные `[1, 2, 3]` и `{a: 1}`. Оба допускают вложение.
  • Блочные скаляры: `|` literal сохраняет переносы строк, `>` folded сворачивает одиночные переносы строк в пробелы; индикаторы обрезки `-` (убрать) и `+` (сохранить) добавляются к индикатору, напр. `|-`, `>+`.
  • Якоря `&name` помечают узлы, алиасы `*name` ссылаются на них, а ключ слияния `<<: *name` извлекает ключи из другого отображения (наследие YAML 1.1, поддерживается большинством парсеров).
  • Мультидокументные потоки разделяются маркерами `---` (начало) и необязательным `...` (конец) — шаблон, который Kubernetes использует для передачи нескольких ресурсов в одном манифесте.
  • Подводные камни: проблема Норвегии (неэкранированные `no`/`yes`/`on`/`off` разбираются как булевы значения по схеме YAML 1.1; YAML 1.2 Core Schema исправляет большинство случаев) и CVE-2017-18342 (произвольное выполнение кода через `yaml.load` в PyYAML; используйте `safe_load`).

Примеры

Исправление непоследовательных отступов в файле конфигурации

Вход (некорректный):
server:
   port: 8080
     host: localhost
  debug: true

Отформатировано (2 пробела):
server:
  port: 8080
  host: localhost
  debug: true

Вложенный список сервисов в docker-compose.yml

version: '3.8'
services:
  web:
    image: nginx:1.25
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - api
  api:
    image: node:20
    environment:
      NODE_ENV: production

Манифест Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    spec:
      containers:
        - name: web
          image: nginx:1.25

Преобразование YAML в JSON для конвейера jq

Вход YAML:
user:
  id: 42
  name: alice
  roles:
    - admin
    - editor

Выход JSON:
{
  "user": {
    "id": 42,
    "name": "alice",
    "roles": ["admin", "editor"]
  }
}

Обнаружение пропущенного пробела после двоеточия

Вход:
name:alice
age: 30

Ошибка в строке 1: пропущен пробел после двоеточия
Исправлено:
name: alice
age: 30

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

Что включает форматирование YAML?

Нормализацию отступов (обычно 2 пробела), единый стиль кавычек, выравнивание маркеров списков и переразметку длинных inline-коллекций в блочный стиль. Большинство YAML-файлов в реальности правят вручную, и они обрастают непоследовательным стилем; форматтер всё это выравнивает.

Преобразуется ли flow-стиль в блочный?

Многие сборки позволяют выбрать между flow-стилем (JSON-подобным {key: value, key2: value2}) и блочным (многострочным с отступами). Блочный удобнее для ручного редактирования; flow компактнее. Обратное преобразование между ними сохраняет данные, но меняет внешний вид.

Почему он меняет мои кавычки?

YAML допускает строки без кавычек, в одинарных и двойных кавычках с тонкими отличиями. Yes/no, true/false, on/off без кавычек интерпретируются как булевы значения; числа без кавычек — это числа, а в кавычках — строки. Форматтер может добавить кавычки, чтобы значения, которые иначе истолковались бы неверно, оставались однозначными.

Сохраняются ли комментарии?

Большинство сборок сохраняют YAML-комментарии (#), но их позиция относительно узлов AST может слегка сместиться. Комментарии над ключами обычно остаются над ними; комментарии в конце той же строки остаются прикреплёнными. После форматирования перепроверьте, осталось ли расположение комментариев осмысленным.

Загружается ли YAML на сервер?

Нет. Парсинг и форматирование выполняются в вашем браузере через js-yaml или аналогичную библиотеку. Вставленный YAML никуда не передаётся.

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

Синтаксис YAML с & (anchor) и * (alias) позволяет описать значение один раз и переиспользовать его. Некоторые форматтеры по умолчанию разворачивают алиасы inline, теряя дедупликацию. Если ваш инструментарий зависит от якорей, ищите опцию их сохранения.

Что если в моём YAML отступы из табуляций?

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

Похожие инструменты

Инструмент форматирования JSON

Онлайн-инструмент для форматирования JSON с подсветкой синтаксиса, обнаружением ошибок и сжатием. Одним нажатием форматируйте JSON данные, быстро находите ошибки формата.

Инструмент форматирования XML

Онлайн-инструмент для форматирования XML с автоматическим отступом, валидацией синтаксиса и сжатием. Настраиваемый отступ, быстрое обнаружение ошибок формата XML.

JSON в TypeScript

Бесплатный онлайн-конвертер JSON в интерфейсы TypeScript: автоматически генерирует определения типов с поддержкой вложенных объектов, массивов и union-типов.

Генератор JSON Schema

Бесплатный онлайн-генератор JSON Schema, создающий соответствующие стандартам определения схем из JSON-данных. Поддерживает вложенные объекты, вывод типов массивов, настройку обязательных полей для быстрой настройки валидации данных.

Конвертер CSV в JSON

Бесплатный онлайн-конвертер CSV в JSON с поддержкой пользовательского разделителя и опцией использования первой строки как заголовка. Быстрая конвертация табличных данных в формат JSON.

Markdown-редактор

Бесплатный онлайн-редактор Markdown с предпросмотром в реальном времени, подсветкой синтаксиса и экспортом в HTML. Поддерживает таблицы, блоки кода и диаграммы.