Як користуватися
- Виберіть напрямок: JSON → YAML або YAML → JSON.
- Вставте дані або натисніть «Спробувати приклад». Результат оновлюватиметься під час введення.
- Виберіть відступ у 2 або 4 пробіли для результату.
- Скопіюйте або завантажте результат. Кнопка «Використати результат як вхідні дані» змінює напрямок, щоб конвертувати його назад.
Як це працює
Для конвертації використовується бібліотека yaml з відкритим кодом (версія 2), яка реалізує специфікацію YAML 1.2. Для практичних цілей YAML 1.2 є надмножиною JSON, тож будь-який документ JSON конвертується в YAML без втрат, а YAML, що містить лише мапи, списки, рядки, числа, булеві значення й null, конвертується назад в ідентичний JSON.
Під час створення YAML інструмент бере в лапки рядки, які можна сприйняти як інший тип значення. Парсери старішого YAML 1.1, як-от PyYAML і багато інструментів CI, трактують yes, no, on і off як булеві значення, 0777 — як вісімкове число, а 2024-01-31 — як дату, тому ці значення записуються як "yes", "0777" і "2024-01-31". Довгі рядки не переносяться на кілька рядків. Коментарі не можна зберегти, оскільки в JSON немає коментарів.
Під час читання YAML якорі (&name) і псевдоніми (*name), зокрема ключ об’єднання <<, розгортаються, а файл із кількома документами, розділеними символами ---, перетворюється на масив JSON. Для захисту браузера кількість розгортань псевдонімів обмежена, що запобігає обробці документів типу «мільярд сміху». Значення YAML, яким немає відповідника в JSON, конвертуються якомога точніше: .inf і .nan стають null, а часові позначки залишаються рядками. Про синтаксичні помилки повідомляється із зазначенням рядка й стовпця.
Приклади
Маніфест Kubernetes
Маніфест Deployment, записаний скриптом у форматі JSON, конвертується у формат YAML, якого очікують користувачі kubectl: списки в containers записуються у вигляді - name: web. Значення на кшталт "no" залишаються в лапках, щоб зберегтися як рядки.
Конфігурація CI з якорями
Файл конвеєра задає значення за замовчуванням через &defaults і повторно використовує їх за допомогою <<: *defaults. Конвертація в JSON покаже, які саме ключі матиме кожне завдання після об’єднання.
Специфікація OpenAPI
Файл OpenAPI ведеться у форматі YAML, але генератору коду потрібен JSON. Вставте YAML, виберіть відступ у 2 пробіли та завантажте файл .json.
Поширені запитання
Чому "yes" у моєму YAML записано в лапках?
За правилами YAML 1.1, які досі використовують PyYAML, Ansible та багато інших інструментів, yes, no, on і off без лапок є булевими значеннями. Лапки зберігають їх як рядки в будь-якому парсері. Лапки не є частиною значення.
Чи зберігаються коментарі YAML під час конвертації в JSON?
Ні. У JSON немає синтаксису для коментарів, тому вони видаляються. Після конвертації JSON назад у YAML коментарі не відновляться.
Що станеться з кількома документами YAML, розділеними символами ---?
Вони конвертуються в один масив JSON, де кожен документ стає окремим елементом у початковому порядку. Один документ конвертується безпосередньо у своє значення.
А що з власними тегами, як-от !Ref у CloudFormation?
Теги, специфічні для певних застосунків, не розпізнаються. Інструмент показує попередження й конвертує значення з тегом як звичайне: !Ref MyBucket стає рядком "MyBucket", а сам тег втрачається.
Конфіденційність
Конвертація в обох напрямках відбувається безпосередньо у вашому браузері. Ваші JSON- або YAML-дані не завантажуються на сервер, не зберігаються й не передаються в аналітику.