tigtools

Конвертер JSON ⇄ YAML

Змініть напрямок, вставте дані й миттєво отримайте результат конвертації. Зручно для маніфестів Kubernetes, конвеєрів CI та конфігурацій застосунків.

Працює у вашому браузері Без реєстрації

Напрямок
Відступ

Як користуватися

  1. Виберіть напрямок: JSON → YAML або YAML → JSON.
  2. Вставте дані або натисніть «Спробувати приклад». Результат оновлюватиметься під час введення.
  3. Виберіть відступ у 2 або 4 пробіли для результату.
  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-дані не завантажуються на сервер, не зберігаються й не передаються в аналітику.