Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас

YAML ⇄ JSON

Конвертувати YAML у JSON і навпаки

Дані надсилаються на сервер, але не зберігаються

Цей інструмент не можна виконати у браузері, тому введені дані надсилаються на наш сервер. Ми обробляємо їх у пам'яті та одразу повертаємо результат: нічого не записується в базу, у файли чи в логи, нічого не передається третім сторонам. Та все ж не вставляйте сюди справжні робочі паролі чи ключі - для чутливих даних краще скористатися локальними інструментами.

Результат

Поділитись

YAML і JSON - те саме різними словами

Обидва формати описують ту саму структуру: словники, списки, рядки, числа. YAML читабельніший для людини і тому став мовою конфігів - docker-compose.yml, GitHub Actions, Kubernetes. JSON зручніший для машин і панує в API.

Конвертація потрібна постійно: перенести приклад із документації, порівняти два конфіги, згодувати YAML-структуру в інструмент, який розуміє лише JSON.

Чому цей інструмент працює на сервері

Написати надійний парсер YAML у браузері - це підключити чималу бібліотеку. Замість цього конвертація виконується тим самим Symfony YAML, який використовує сам Laravel, тож результат збігається з тим, як фреймворк прочитає ваш файл.

Особливості YAML, на яких спотикаються

Табуляція заборонена. Тільки пробіли. Це помилка номер один, і редактор її не завжди показує.

Норвезька проблема. У старому YAML 1.1 no, off, yes, on перетворювалися на булеві значення - тому код країни Норвегії NO ставав false. Symfony використовує YAML 1.2, де такого немає, але в інших парсерах пастка жива. Беріть значення в лапки, якщо це рядок.

country: NO        # у YAML 1.1 це false
country: "NO"      # завжди рядок

Провідний нуль. version: 010 у деяких парсерах читається як вісімкове число 8.

Багаторядкові рядки. | зберігає переноси, > схлопує їх у пробіли:

script: |
  php artisan migrate
  php artisan cache:clear

У PHP і Laravel

use Symfony\Component\Yaml\Yaml;

$config = Yaml::parse(file_get_contents('config.yml'));
$yaml = Yaml::dump($array, inline: 4, indent: 2);

Symfony YAML вже є у кожному Laravel-проєкті як транзитивна залежність, тому окремо ставити нічого не треба.

// Читання з обробкою помилки - інакше кинутий виняток покладе команду
use Symfony\Component\Yaml\Exception\ParseException;

try {
    $config = Yaml::parseFile($path);
} catch (ParseException $e) {
    $this->error("Некоректний YAML: {$e->getMessage()}");
}

Сам Laravel конфіги в YAML не використовує - у нього PHP-масиви в config/, які кешуються в один файл. YAML у проєкті зазвичай означає CI, Docker або зовнішній сервіс.