Що таке конвертація JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) — це суворий текстовий формат з дужками для структурованих даних; YAML (YAML Ain't Markup Language, версія 1.2) є надмножиною JSON, що використовує відступи, розриви рядків та зручний для читання синтаксис для тієї самої моделі значень. Конвертація між ними дозволяє перетворювати ту саму конфігурацію між зручною для машини формою (JSON для API, валідації схем, програматичних перетворень) та зручною для людини формою (YAML для рев'ю коду, Kubernetes-маніфестів, робочих процесів GitHub Actions) без ручного переписування жодного ключа.
Як працює конвертація JSON ↔ YAML?
Кожне перетворення виконується локально у вашому браузері за допомогою вбудованої бібліотеки js-yaml (MIT, версія 4.1.0). Основні кроки:
- Селектор режиму (Автовизначення / JSON → YAML / YAML → JSON) визначає, який конвеєр запускається. У режимі автовизначення перший символ без пробілу у введенні вибирає напрямок —
{або[означає JSON; все інше означає YAML. - JSON → YAML:
JSON.parseперевіряє введення і дає JavaScript-значення;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })записує форму YAML 1.2. З увімкненим режимом кількох документів, вхідний масив виводиться по одному елементу на документ з'єднаних роздільниками---. - YAML → JSON:
jsyaml.loadAllрозбирає кожен документ у введенні (автоматично обробляючи роздільники---) у масив; введення з одним документом розгортається, щоб вивід JSON був самим документом, а не масивом з одним елементом. - Відступ (2 або 4 пробіли) та форматований друк налаштовуються. Форматований друк вимк дає мінімізований JSON через
JSON.stringify(value)без пробілів. - Вивід записується у текстову область лише для читання. При помилках розбору YAML повідомлення про помилку включає рядок і стовпець з нумерацією від 1, повідомлені через
e.markбібліотекиjs-yaml, щоб ви могли відразу знайти помилку.
Чому варто конвертувати JSON та YAML цим інструментом?
- Конфіденційність: кожен прохід розбору, перетворення та генерації відбувається у вашому браузері. Дані — включаючи Kubernetes-секрети, підписані JWT та конфіденційні конфіги — ніколи не потрапляють на наші сервери.
- Багатодокументний YAML:
jsyaml.loadAllрозпізнає роздільники---і повертає масив документів, який конвертер розгортає для однодокументних випадків або зберігає як JSON-масив для багатодокументних випадків. - Якорі та аліаси розгорнуті: механізм
&anchor/*aliasYAML обробляється схемоюjs-yamlза замовчуванням. Значення, визначене один раз і посилане двічі, зберігається при зворотному перетворенні у JSON-об'єкт, де всі посилання мають рівні значення. - Без CDN, без телеметрії: бібліотека
js-yaml.min.jsпостачається з того самого джерела, що й сторінка, тому інструмент працює офлайн, за корпоративними проксі та у повітряно-ізольованих середовищах.
Які поширені застосування конвертації JSON ↔ YAML?
Перемикання між JSON та YAML трапляється у DevOps, платформній інженерії та API-інструментах:
- Kubernetes-маніфести: конвертація YAML
Deployment,ConfigMapабоHelmReleaseу JSON, щоб внутрішній валідатор політик (Joi, Ajv, OPA Rego) міг програматично лінтувати його, а потім назад у YAML для застосування до кластера. - CI/CD робочі процеси: зворотне перетворення
workflow.ymlGitHub Actions через JSON, щоб генератор коду міг переписати матрицю або залежності завдань, а потім генерація відформатованого YAML для PR. - Специфікації OpenAPI: вставка JSON
openapi.jsonз автоматично згенерованої документації бекенду та конвертація уopenapi.yamlдля редагованого людиною еталону, збереженого у репозиторії.
Як виглядає приклад зворотного перетворення JSON ↔ YAML?
Вставте {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} і натисніть КОНВЕРТУВАТИ у режимі JSON → YAML — отримаєте вісім рядків відформатованого YAML з apiVersion: apps/v1 на першому рядку. Подайте цей YAML назад у режимі YAML → JSON з увімкненим форматованим друком — отримаєте вихідний об'єкт байт у байт після стабільного JSON.stringify(value, null, 2), зі збереженим порядком ключів, оскільки схема js-yaml за замовчуванням враховує порядок вставки в обох напрямках.
Чи цей конвертер JSON ↔ YAML працює повністю у моєму браузері?
Так. Кожен прохід розбору, перетворення та генерації виконується локально як JavaScript у вашій вкладці браузера. Вбудована бібліотека js-yaml постачається з того самого джерела, що й сторінка — без CDN, без fetch, без XMLHttpRequest, без navigator.sendBeacon на введенні. Інструмент також працює офлайн після завантаження сторінки. Kubernetes-секрети, JWT-навантаження, підписані CloudFormation YAMLs та конфіденційні конфіги залишаються на вашому пристрої.
Як конвертер обробляє багатодокументний YAML?
YAML підтримує кілька документів в одному потоці, розділених рядками, що містять лише ---. У режимі YAML → JSON конвертер викликає jsyaml.loadAll, який повертає кожен документ як JavaScript-значення. Якщо знайдено рівно один документ, вивід JSON є цим документом безпосередньо; якщо два або більше — вивід JSON є масивом. У режимі JSON → YAML, коли введення є JSON-масивом І перемикач «Кілька документів» увімкнений, кожен елемент масиву виводиться як окремий документ з роздільниками --- між ними — корисно для генерації сумісного з kubectl apply пакету з JSON-масиву ресурсів.
Чи підтримуються якорі та аліаси YAML?
Так — визначення &anchor та посилання *alias розгортаються схемою js-yaml за замовчуванням під час кроку завантаження. Введення YAML виду defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d розбирається у JSON-об'єкт, де job_a і job_b обидва містять retries: 3, timeout: 30. Ключ злиття << (розширення YAML 1.1, яке js-yaml все ще підтримує) також підтримується в схемі за замовчуванням.
Чи зберігаються коментарі YAML при конвертації у JSON і назад?
Ні — js-yaml видаляє коментарі під час кроку розбору, тому зворотне перетворення YAML → JSON → YAML втратить кожен рядок з префіксом #. Це відоме обмеження моделі завантаження/виведення; якщо збереження коментарів є критичним, використовуйте бібліотеку, що підтримує коментарі, наприклад npm-пакет yaml (який постачає CST + AST API, призначений для збереження тривіального вмісту), а не js-yaml. Для більшості процесів конвертації конфігурацій компроміс прийнятний: YAML після зворотного перетворення зберігає кожен ключ, значення, якір та аліас, просто без написаних людиною коментарів.
Що відбувається з користувацькими тегами YAML?
Конвертер використовує DEFAULT_SCHEMA бібліотеки js-yaml, що розуміє !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary та !!timestamp — кожен тег у схемах YAML 1.2 core та JSON. Користувацькі або специфічні для застосунків теги (наприклад, !Ref у CloudFormation, !vault у Ansible) не розпізнаються і відображаються як чітка помилка з посиланням на непідтримуваний тег. Для CloudFormation зокрема, використовуйте потік aws cloudformation package + --output-template-file для розгортання користувацьких тегів перед вставкою у цей конвертер.
Цей конвертер JSON ↔ YAML постачається з js-yaml@4.1.0, вбудованим у той самий ресурс, підтримує багатодокументні потоки та якорі/аліаси з коробки та повідомляє помилки розбору YAML з рядком і стовпцем, щоб ви могли виправити джерело. Без завантаження, без CDN, без телеметрії — кожен байт залишається у вашому браузері.