Konwersja YAML i JSON bez cichej zmiany danych
YAML i JSON opisują podobne struktury: mapy/obiekty, listy/tablice oraz wartości skalarne. Największy problem przy konwersji nie polega jednak na zamianie nawiasów na wcięcia, lecz na zachowaniu typów i struktury.
Ten konwerter pilnuje m.in. stringów wyglądających jak liczby lub wartości logiczne, duplikatów kluczy, komentarzy oraz pustych kolekcji. Jeśli YAML używa konstrukcji, których nie da się bezpiecznie odwzorować w prostym JSON, narzędzie pokazuje błąd zamiast generować pozornie poprawny wynik.
YAML a JSON – co powinno pozostać takie samo?
Struktura
Mapa YAML powinna stać się obiektem JSON, lista YAML – tablicą JSON, a kolejne poziomy zagnieżdżenia muszą pozostać w tym samym miejscu.
Typ wartości
12 jako liczba, true jako boolean i "0012" jako tekst nie są równoważne. Konwerter powinien zachować tę różnicę w obie strony.
Jakie konstrukcje YAML obsługuje kalkulator?
Obsługiwany jest praktyczny podzbiór YAML 1.2 potrzebny przy typowych plikach konfiguracyjnych i wymianie danych z JSON:
- mapy klucz: wartość i listy rozpoczynane przez -,
- zagnieżdżone mapy i listy, także listy obiektów,
- listy i mapy przepływowe, np. [1, 2, 3] oraz {a: 1, b: 2},
- null, boolean, liczby oraz stringi w pojedynczym i podwójnym cudzysłowie,
- komentarze rozpoczynane przez # zgodnie z regułą separatora,
- puste kolekcje [] i {}.
Narzędzie nie udaje pełnego interpretera całego standardu. Anchory i aliasy (&/*), tagi, złożone klucze, scalanie <<, wiele dokumentów oraz bloki wieloliniowe |/> są odrzucane z jasnym komunikatem.
Najbardziej zdradliwe są typy: „0012”, „true” i „null”
W YAML 1.2 niecytowane wartości mogą zostać rozpoznane jako liczba, boolean albo null. Dlatego podczas konwersji JSON → YAML string "0012" musi pozostać w cudzysłowie. To samo dotyczy tekstów "true", "false" i "null".
↓
id: "0012"
active: "true"
Z kolei yes, no, on i off pozostają zwykłymi stringami w schemacie YAML 1.2 Core. To ważna różnica względem starszych interpretacji YAML 1.1.
Przykład: URL z # i string z zerami wiodącymi
Wejście YAML:
id: "0012"
status: on
empty: []
Poprawny wynik JSON zachowuje fragment adresu po #, identyfikator jako string, on jako string i pustą tablicę:
Duplikaty kluczy – dlaczego kalkulator je blokuje?
Mapa YAML nie powinna zawierać dwóch identycznych kluczy, a obiekt JavaScript/JSON i tak zachowałby tylko jedną wartość. Ciche nadpisanie jest szczególnie niebezpieczne w konfiguracjach.
timeout: 30
Zamiast wybrać ostatnią wartość 30, konwerter zgłasza duplikat i wymaga poprawienia źródła.
Najczęstsze błędy YAML i ich znaczenie
| Problem | Co się dzieje | Jak poprawić |
|---|---|---|
| Tabulator w wcięciu | Struktura staje się niejednoznaczna | Użyj spacji do wcięć |
| Duplikat klucza | JSON nie zachowa obu wartości | Zmień nazwę lub usuń duplikat |
| String 0012 bez cudzysłowu | Może zostać odczytany jako liczba | Użyj "0012" |
| Anchor / alias | JSON nie ma bezpośredniego odpowiednika mechanizmu referencji | Rozwiń wartość przed konwersją |
| | lub > | To wieloliniowy skalar YAML | W tym narzędziu zamień go na cytowany string z \n |
Dla ucznia i studenta: sprawdź round-trip
Masz JSON {"code":"0012","enabled":true,"items":[]}. Zamień go na YAML, a następnie otrzymany YAML ponownie na JSON. Czy wartości mają te same typy?
Pokaż rozwiązanieUkryj rozwiązanie
Bezpieczny YAML to:
enabled: true
items: []
Po konwersji wstecz code nadal jest stringiem, enabled booleanem, a items pustą tablicą. To właśnie poprawny round-trip.
Ciekawostka
Znak # nie zawsze oznacza komentarz. W zwykłym skalarze YAML komentarz zaczyna się wtedy, gdy # jest poprzedzony separatorem. Dlatego adres https://example.com/page#sekcja powinien pozostać cały.
Wskazówka od KalkulatorXXL
Po konwersji konfiguracji zawsze wykonaj szybki round-trip: JSON → YAML → JSON albo YAML → JSON → YAML. Jeśli typy, puste listy i kluczowe ścieżki pozostają takie same, znacznie zmniejszasz ryzyko błędu wdrożeniowego.
Powiązane narzędzia
FAQ – YAML ↔ JSON (konwerter i walidacja)
Ostatnia aktualizacja kalkulatora: 30.08.2026.