Конвертер JSON в YAML
Вставьте JSON, получите YAML мгновенно. Live-конвертация в браузере. Готово для K8s/Compose, отступ 2/4 пробела, умное экранирование. 100% приватно, без загрузки.
Настройки · 2 пробела · auto · block
Что такое YAML и зачем конвертировать из JSON?
YAML (YAML Ain't Markup Language) — это человеко-читаемый формат сериализации данных, разработанный для конфигурационных файлов, infrastructure-as-code и везде, где человек пишет данные, которые читает машина. Синтаксис на основе отступов не требует фигурных или квадратных скобок, что делает его гораздо более читаемым, чем JSON, для сложных вложенных структур. Kubernetes, Helm, Ansible, Docker Compose, GitHub Actions, CircleCI и практически любой cloud-native инструмент использует YAML как основной формат конфигурации. Поэтому конвертация JSON в YAML — одна из самых частых задач в DevOps и backend-разработке: вы получаете определение ресурса от API в JSON и нужен YAML-манифест для коммита в систему контроля версий.
Четыре отличия этого инструмента от типичных онлайн-конвертеров:
**1. Проблема Норвегии — авто-безопасное закавычивание.** В YAML 1.1 (всё ещё используется в production миллионами парсеров — старые Kubernetes, PyYAML, Ansible, Ruby Psych) голые строки yes, no, on, off, y, n парсятся как булевы true/false. Это печально известно по ISO-коду Норвегии («NO» → false). Режим Auto использует библиотеку eemeli/yaml со схемой YAML 1.1, автоматически оборачивая Norway-строки в кавычки и гарантируя безопасные round-trip через парсеры YAML 1.1 и 1.2. Подробнее в нашей статье «Проблема Норвегии в YAML и различия JSON-YAML».
**2. Сохранение порядка ключей.** В отличие от некоторых конвертеров, сортирующих ключи по алфавиту, этот инструмент сохраняет исходный порядок вставки из JSON — поведение, совпадающее с JSON.parse() во всех современных движках JavaScript. Это важно для манифестов Kubernetes (где apiVersion и kind по конвенции идут первыми), OpenAPI-спецификаций (где info перед paths) и любых конфигов, где порядок полей значим для читаемости или diff.
**3. Оговорка про точность больших чисел.** Числа JSON больше 2^53 - 1 (9007199254740991) не могут быть представлены точно в JavaScript IEEE 754 double-precision. Когда JSON.parse() читает большое целое — поле resourceVersion Kubernetes (на сервере это 64-битное), оно молча обрезается. Это фундаментальное ограничение браузерного JavaScript, касающееся всех браузерных JSON-инструментов. Безопасный обход — хранить большие целые как строки в JSON перед конвертацией.
**4. 100% приватность в браузере.** Ваш JSON — часто содержит API-ключи, учётные данные БД, внутренние конфигурации сервисов и production-секреты — никогда не покидает браузер. Данные не отправляются на сервер. Это можно проверить во вкладке Network браузера. Это единственный безопасный способ обработки чувствительной конфигурации в онлайн-инструменте. См. наш парный инструмент в обратную сторону — YAML в JSON, и наш форматировщик JSON, если нужно проверить и отформатировать JSON перед конвертацией.
Человекочитаемая природа YAML приходит с компромиссом: парсинговых краевых случаев у него больше, чем у JSON. Помимо проблемы Норвегии, у YAML есть особенности с восьмеричными числами (0777 в YAML 1.1 — это 511), синтаксис многострочных строк (| для буквальных, > для свёрнутых), якоря и алиасы (&anchor и *alias) и поддержка нескольких документов (--- разделитель). У JSON ничего этого нет — это строгий минимальный формат с шестью типами данных. Для машинного обмена JSON почти всегда лучше. Для конфигов с ручным редактированием, где важны читаемость и комментарии, побеждает YAML. Этот конвертер даёт лучшее из обоих миров. Нужно сравнить два JSON и найти отличия? Попробуйте JSON Diff.
// Convert JSON to YAML in Node.js using the eemeli/yaml library
import { Document } from 'yaml';
const data = JSON.parse('{"apiVersion":"apps/v1","kind":"Deployment"}');
// version: '1.1' ensures Norway-problem strings (yes/no/on/off/y/n)
// are automatically quoted in the output for YAML 1.1 parser safety
const doc = new Document(data, { version: '1.1' });
const yamlString = doc.toString({
indent: 2,
lineWidth: 0, // disable line wrapping
defaultStringType: 'PLAIN', // Auto mode: only quote when needed
});
console.log(yamlString);
// apiVersion: apps/v1
// kind: Deployment Ключевые возможности
Live-конвертация
YAML обновляется мгновенно по мере ввода или вставки JSON — кнопка «Конвертировать» не нужна. Большие входы (>200 КБ) автоматически переключаются в ручной режим, чтобы браузер оставался отзывчивым.
Отступ 2 или 4 пробела
Переключение между 2-пробельным (стандарт для Kubernetes, Docker Compose и GitHub Actions) и 4-пробельным (конвенция Ansible). Табы YAML запрещены — инструмент всегда использует пробелы.
Auto-безопасное закавычивание (Norway-safe)
Режим Auto по умолчанию использует схему YAML 1.1 для автоматического закавычивания «no», «yes», «on», «off», «y», «n», которые YAML 1.1-парсеры приняли бы за булевы — это предотвращает мисконфигурации в production.
Стили Block и Flow
Block-стиль даёт отступы и человекочитаемый YAML для манифестов и конфигов. Flow-стиль — компактный inline YAML, похожий на JSON, удобный для фрагментов в документации.
100% приватность в браузере
Вся конвертация работает локально на JavaScript. Ваш JSON — включая API-ключи, учётные данные и production-конфиги — не отправляется на сервер, не логируется и не сохраняется.
Поддержка K8s, Compose и Terraform
Оптимизирован для реальных DevOps-сценариев: манифесты Kubernetes, стеки Docker Compose, values чартов Helm, workflow GitHub Actions, OpenAPI-спецификации и JSON-вывод Terraform plan — с примерами для каждого.
Примеры
Kubernetes Deployment
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"my-app","namespace":"production","labels":{"app":"my-app","version":"1.0.0"}},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"my-app"}},"template":{"metadata":{"labels":{"app":"my-app"}},"spec":{"containers":[{"name":"my-app","image":"my-app:1.0.0","ports":[{"containerPort":8080}],"resources":{"requests":{"memory":"64Mi","cpu":"250m"},"limits":{"memory":"128Mi","cpu":"500m"}}}]}}}} Преобразование манифеста Kubernetes Deployment из формата JSON-ответа API в YAML для применения через kubectl apply -f
Docker Compose
{"version":"3.9","services":{"web":{"image":"nginx:1.25-alpine","ports":["80:80","443:443"],"environment":{"NGINX_HOST":"example.com","NGINX_PORT":"80"},"depends_on":["db"],"restart":"unless-stopped"},"db":{"image":"postgres:16-alpine","environment":{"POSTGRES_DB":"mydb","POSTGRES_USER":"admin","POSTGRES_PASSWORD":"secret"},"volumes":["pgdata:/var/lib/postgresql/data"]}},"volumes":{"pgdata":{}}} Преобразование определения сервиса Docker Compose из JSON в YAML, нужный для docker compose up
GitHub Actions Workflow
{"name":"CI","on":{"push":{"branches":["main"]},"pull_request":{"branches":["main"]}},"jobs":{"build":{"runs-on":"ubuntu-latest","steps":[{"uses":"actions/checkout@v4"},{"name":"Set up Node.js","uses":"actions/setup-node@v4","with":{"node-version":"20","cache":"pnpm"}},{"name":"Install dependencies","run":"pnpm install --frozen-lockfile"},{"name":"Run tests","run":"pnpm test"}]}}} Преобразование описания CI workflow GitHub Actions из JSON в YAML для коммита в .github/workflows/
OpenAPI спецификация
{"openapi":"3.0.3","info":{"title":"User API","version":"1.0.0","description":"Manage application users"},"paths":{"/users":{"get":{"summary":"List users","operationId":"listUsers","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":20}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}}}}},"/users/{id}":{"get":{"summary":"Get user","operationId":"getUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}}},"components":{"schemas":{"User":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"}}}}}} Преобразование OpenAPI 3.0 spec из JSON в YAML — предпочитаемый формат для Swagger UI, Redoc и большинства API-инструментов
package.json
{"name":"my-app","version":"1.0.0","description":"A sample Node.js application","private":true,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","test":"vitest","lint":"eslint . --ext .ts,.tsx"},"dependencies":{"react":"^18.3.0","react-dom":"^18.3.0"},"devDependencies":{"typescript":"^5.4.0","vite":"^5.2.0","vitest":"^1.5.0","eslint":"^8.57.0","@types/react":"^18.3.0"},"engines":{"node":">=20.0.0","pnpm":">=9.0.0"}} Преобразование типичного Node.js package.json в YAML — полезно для миграции конфигурации проекта в инструменты, предпочитающие YAML
Terraform JSON Plan
{"format_version":"1.0","terraform_version":"1.7.4","variables":{"region":{"value":"us-east-1"}},"planned_values":{"root_module":{"resources":[{"address":"aws_s3_bucket.main","mode":"managed","type":"aws_s3_bucket","name":"main","values":{"bucket":"my-app-assets","force_destroy":false,"tags":{"Environment":"production","ManagedBy":"terraform"}}}]}},"resource_changes":[{"address":"aws_s3_bucket.main","mode":"managed","type":"aws_s3_bucket","name":"main","change":{"actions":["create"],"before":null,"after":{"bucket":"my-app-assets","force_destroy":false}}}]} Преобразование JSON-вывода Terraform plan в YAML для просмотра человеком, GitOps-аудита и CI/CD-конвейеров
Как использовать
- 1
Вставьте JSON
Введите или вставьте JSON в поле ввода. Можно нажать «Загрузить пример», чтобы попробовать на готовом — например, K8s Deployment, Docker Compose или Terraform plan.
- 2
Смотрите live YAML
YAML появляется в панели вывода мгновенно. Настройте параметры (отступ 2/4, кавычки Auto/Double/Single, стиль Block/Flow) под требования целевого инструмента.
- 3
Скопируйте или скачайте
Нажмите «Скопировать», чтобы поместить YAML в буфер обмена, или «Скачать», чтобы сохранить как .yaml для kubectl apply, docker compose up или другого инструмента.
Типичные ловушки конвертации
Конечные запятые
JSON не допускает запятую после последнего элемента в объекте или массиве. Часто встречается при копировании из JavaScript, где конечные запятые разрешены. Уберите последнюю запятую перед конвертацией.
{"name": "Alice", "role": "admin",} {"name": "Alice", "role": "admin"} Одинарные кавычки
JSON требует двойные кавычки для всех строк и ключей. Одинарные валидны в JavaScript и Python, но в JSON — синтаксическая ошибка.
{'name': 'Alice', 'active': true} {"name": "Alice", "active": true} Ключи без кавычек
Все ключи объекта в JSON должны быть в двойных кавычках. Ключи без кавычек валидны в литералах JavaScript, но в строгом JSON вызывают ошибку разбора.
{name: "Alice", role: "admin"} {"name": "Alice", "role": "admin"} Комментарии не разрешены
Стандартный JSON не поддерживает комментарии — ни //, ни /* */, ни #. Если нужны комментарии в конфигурации, используйте YAML (поддерживает # комментарии) или JSONC. Уберите все комментарии перед использованием как JSON.
{"port": 8080 // HTTP port} {"port": 8080} Проблема Норвегии в YAML (обрабатывается в режиме Auto)
В YAML 1.1 парсерах (Kubernetes, Ansible, PyYAML, Ruby Psych) голые строки yes, no, on, off, y, n парсятся как булевы. Режим Auto автоматически закавычивает их в YAML, гарантируя безопасный round-trip через любой парсер 1.1 или 1.2.
# JSON input: {"country": "no", "enabled": "yes"}
# YAML without quoting (dangerous):
country: no
enabled: yes
# YAML 1.1 parser reads: country=false, enabled=true # YAML with Auto quoting (safe): country: 'no' enabled: 'yes' # YAML 1.1 parser reads: country="no", enabled="yes"
Потеря точности больших целых
JavaScript точно представляет целые до 2^53 - 1 (9007199254740991). Целые JSON больше — например, resourceVersion Kubernetes (int64 на сервере) — молча округляются при разборе через JSON.parse(). Затем обрезанное число попадает в YAML. Безопасный обход — хранить большие целые как строки в JSON перед конвертацией.
// JSON input (resourceVersion is int64 on K8s server)
{"resourceVersion": 9007199254740993}
// JavaScript reads it as: 9007199254740992 (precision lost)
// YAML output will contain the wrong number // Store large integers as strings to preserve precision
{"resourceVersion": "9007199254740993"}
// YAML output: resourceVersion: '9007199254740993' (exact) Типичные сценарии
- Манифесты Kubernetes
- Конвертация JSON-ответов API из kubectl get -o json или Kubernetes API в YAML-манифесты для GitOps, Kustomize-overlay и kubectl apply -f.
- Файлы Docker Compose
- Преобразование JSON-вывода docker inspect или программно сгенерированных конфигураций в файлы docker-compose.yaml для docker compose up и Docker Stack.
- Helm chart values
- Конвертация JSON-экспорта в YAML values для Helm-деплоев, обеспечивая version-controlled инфраструктурную конфигурацию с чистым синтаксисом.
- Workflow GitHub Actions
- Программное построение определений GitHub Actions в JSON и конвертация в формат .github/workflows/*.yaml, нужный runner.
- OpenAPI-спецификации
- Конвертация OpenAPI/Swagger из JSON, который возвращают многие фреймворки (FastAPI, SpringDoc), в YAML, предпочитаемый Swagger UI, Redoc и API-gateway инструментами.
- Миграция конфигурации
- Миграция конфигов в JSON (appsettings.json, config.json) в YAML для инструментов, требующих или предпочитающих YAML, с возможностью комментариев.
Технические детали
- Разбор JSON по RFC 8259
- Вход разбирается через нативный JSON.parse(), полностью соответствующий RFC 8259. Это даёт точные сообщения об ошибках синтаксиса (включая позицию) и обрабатывает все типы JSON: строки, числа, булевы, null, массивы и объекты.
- Вывод YAML 1.2 через eemeli/yaml Document API со схемой YAML 1.1
- YAML генерируется библиотекой eemeli/yaml (v2.8+, CVE-safe) через Document API с version: '1.1'. Это даёт вывод, совместимый с YAML 1.2, применяя при этом правила закавычивания YAML 1.1 — Norway-строки автоматически закавычиваются. Перенос строк отключён (lineWidth: 0).
- 100% в браузере — без загрузок и сервера
- Вся обработка идёт в JavaScript-движке браузера. Никакие данные не передаются по сети. Входы больше 200 КБ автоматически переключаются из live в ручной режим (требуется явный клик «Конвертировать»), чтобы браузер оставался отзывчивым.
Лучшие практики
- Всегда используйте Auto для DevOps-конфигов
- При конвертации JSON для Kubernetes, Helm, Ansible, Docker Compose или GitHub Actions всегда используйте режим Auto (Norway-safe). YAML 1.1 парсеры в этих инструментах молча принимают yes, no, on, off, y, n за булевы — Auto предотвращает это прозрачно.
- 2 пробела для cloud-native инструментов
- Kubernetes, Docker Compose, GitHub Actions и Helm используют отступ 2 пробела по конвенции. 4 пробела в этих файлах валидны, но создают несогласованность с примерами сообщества и существующими манифестами команды.
- Большие целые — как строки перед конвертацией
- resourceVersion, uid Kubernetes и другие int64 поля API-сервера могут превышать безопасный диапазон JavaScript (2^53 - 1). Если нужна точная числовая точность, храните их как JSON-строки. Особенно важно для kubectl get -o json вывода с серверными полями.
- Сначала проверьте JSON
- Если JSON-источник — рукописный или из системы, иногда дающей невалидный вывод (конечные запятые, ключи без кавычек, комментарии), проверьте его форматировщиком JSON перед конвертацией. Используйте наш форматировщик JSON, чтобы поймать и исправить ошибки.
- Block-стиль для файлов в Git
- Block-стиль YAML даёт чистые читаемые diff в Git: каждое поле на своей строке. Flow (компактный inline) усложняет diff и review. Оставьте Flow для коротких YAML-фрагментов в документации или инструментов с компактным выводом.
Часто задаваемые вопросы
Как конвертировать JSON в YAML онлайн?
Что такое YAML Norway Problem и как инструмент с ней справляется?
Почему проблема Норвегии важна для Kubernetes и DevOps?
Использовать отступ 2 или 4 пробела для YAML?
Как создать манифест Kubernetes с помощью этого инструмента?
Как конвертировать Docker Compose JSON в YAML?
Могут ли числа JSON, превышающие 2^53, потерять точность при конвертации в YAML?
Сохраняет ли конвертер исходный порядок ключей JSON?
Когда использовать JSON, а когда YAML?
Как конвертировать JSON в YAML в командной строке?
Как конвертировать JSON в YAML в Python, Node.js или Go?
Отправляются ли мои данные JSON на сервер?
Есть ли ограничение размера файла JSON?
Похожие инструменты
Все инструменты →Base64 декодер и кодировщик
Кодирование и форматирование
Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.
JSON Diff и сравнение
Кодирование и форматирование
Сравнивайте два JSON-файла мгновенно в браузере. Side-by-side подсветка, вывод JSON Patch (RFC 6902), игнорирование шума вроде timestamp и ID. 100% приватно, без загрузки.
Форматировщик и валидатор JSON
Кодирование и форматирование
Форматирование, проверка и улучшение читаемости JSON прямо в браузере. Бесплатный онлайн-инструмент с проверкой синтаксиса, поиском ошибок, минификацией и копированием в один клик. Полная приватность.
Генератор QR-кодов — URL, WiFi, vCard, Email, SMS, Geo
Кодирование и форматирование
Бесплатный генератор QR-кодов. Создавайте статические QR для URL, WiFi, vCard, email и SMS. Скачивание SVG и PNG. Без срока действия, без регистрации, 100% в браузере.
URL кодировщик и декодер с парсером URL
Кодирование и форматирование
Декодирование и кодирование URL в реальном времени со встроенным парсером URL. Два режима: encodeURI и encodeURIComponent. 100% приватно, данные не отправляются на сервер.
Конвертер YAML в JSON
Кодирование и форматирование
Вставьте YAML, получите JSON мгновенно. Live-конвертация в браузере. Поддержка манифестов K8s, OpenAPI, helm values. 100% приватно, без загрузки.