Jak używać
- Wybierz kierunek: JSON → YAML lub YAML → JSON.
- Wklej dane lub kliknij „Wypróbuj przykład”. Wynik aktualizuje się podczas pisania.
- Wybierz wcięcie 2 lub 4 spacji dla wyniku.
- Skopiuj lub pobierz wynik. Opcja „Użyj wyniku jako wejścia” zmienia kierunek, aby można było wykonać konwersję w drugą stronę.
Jak to działa
Konwersja korzysta z biblioteki yaml typu open source (wersja 2), która implementuje specyfikację YAML 1.2. W praktyce YAML 1.2 jest nadzbiorem JSON, dlatego każdy dokument JSON można bezstratnie przekonwertować do YAML, a YAML zawierający wyłącznie mapy, listy, ciągi znaków, liczby, wartości logiczne i null można przekonwertować z powrotem do identycznego JSON.
Podczas zapisywania YAML narzędzie ujmuje w cudzysłów ciągi znaków, które można zinterpretować inaczej. Starsze parsery YAML 1.1, takie jak PyYAML i wiele narzędzi CI, odczytują yes, no, on i off jako wartości logiczne, 0777 jako liczbę ósemkową, a 2024-01-31 jako datę, dlatego zapisywane są jako "yes", "0777" i "2024-01-31". Długie ciągi znaków nie są dzielone na kilka wierszy. Komentarzy nie można zachować, ponieważ JSON ich nie obsługuje.
Podczas odczytu YAML kotwice (&name) i aliasy (*name) są rozwijane, w tym klucz scalania <<, a plik z kilkoma dokumentami rozdzielonymi przez --- staje się tablicą JSON. Aby chronić przeglądarkę, liczba rozwinięć aliasów jest ograniczona, co zapobiega dokumentom typu „billion laughs”. Wartości YAML bez odpowiednika w JSON są konwertowane w możliwie najwierniejszy sposób: .inf i .nan stają się null, a znaczniki czasu pozostają ciągami znaków. Błędy składni są zgłaszane wraz z numerem wiersza i kolumny.
Przykłady
Manifest Kubernetes
Manifest Deployment zapisany przez skrypt w JSON zostaje przekonwertowany do układu YAML oczekiwanego przez użytkowników kubectl. Listy pod containers są zapisywane w formacie - name: web. Wartości takie jak "no" pozostają ujęte w cudzysłów, dzięki czemu zachowują typ ciągu znaków.
Konfiguracja CI z kotwicami
Plik pipeline definiuje wartości domyślne przez &defaults i ponownie ich używa za pomocą <<: *defaults. Konwersja do JSON pokazuje dokładnie, jakie klucze ostatecznie otrzymuje każde zadanie po scaleniu.
Specyfikacja OpenAPI
Plik OpenAPI jest utrzymywany w YAML, ale generator kodu wymaga JSON. Wklej YAML, wybierz wcięcie 2 spacji i pobierz plik .json.
Często zadawane pytania
Dlaczego "yes" jest ujęte w cudzysłów w moim YAML?
Zgodnie z regułami YAML 1.1, nadal używanymi przez PyYAML, Ansible i wiele innych narzędzi, yes, no, on lub off bez cudzysłowu jest wartością logiczną. Ujęcie tych wartości w cudzysłów sprawia, że każdy parser odczyta je jako ciągi znaków. Cudzysłowy nie są częścią wartości.
Czy komentarze YAML są zachowywane podczas konwersji do JSON?
Nie. JSON nie obsługuje składni komentarzy, więc są one pomijane. Ponowna konwersja JSON do YAML ich nie przywróci.
Co się dzieje, gdy plik zawiera kilka dokumentów YAML rozdzielonych przez ---?
Są konwertowane do jednej tablicy JSON, w której każdy dokument stanowi osobny element, w oryginalnej kolejności. Pojedynczy dokument jest konwertowany bezpośrednio do jego wartości.
Co z własnymi tagami, takimi jak !Ref w CloudFormation?
Tagi specyficzne dla aplikacji nie są rozpoznawane. Narzędzie wyświetla ostrzeżenie i konwertuje otagowaną wartość jako zwykłą wartość, więc !Ref MyBucket staje się ciągiem znaków "MyBucket", a sam tag zostaje pominięty.
Prywatność
Konwersja w obu kierunkach odbywa się w całości w przeglądarce. JSON ani YAML nie są przesyłane, przechowywane ani uwzględniane w danych analitycznych.