Czym jest konwersja JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) to ścisły, oparty na nawiasach klamrowych format tekstowy dla danych ustrukturyzowanych; YAML (YAML Ain't Markup Language, wersja 1.2) to nadzbiór JSON-a, który dla tego samego modelu wartości używa wcięć, znaków końca linii i czytelnej dla człowieka składni. Konwersja między nimi pozwala przełączać tę samą konfigurację między formą przyjazną dla maszyn (JSON dla API, walidacji schematu, programistycznych transformacji) a formą przyjazną dla człowieka (YAML do code review, manifestów Kubernetes, workflow GitHub Actions) bez przepisywania ani jednego klucza.
Jak działa konwersja JSON ↔ YAML?
Każda konwersja działa lokalnie w Twojej przeglądarce za pomocą wbudowanej biblioteki js-yaml (MIT, wersja 4.1.0). Najważniejsze kroki to:
- Przełącznik trybu (Wykryj automatycznie / JSON → YAML / YAML → JSON) decyduje, który potok się uruchamia. W trybie Wykryj automatycznie pierwszy znak niebędący białym znakiem decyduje o kierunku —
{lub[oznacza JSON; cokolwiek innego oznacza YAML. - JSON → YAML:
JSON.parsewaliduje wejście i produkuje wartość JavaScript;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })zapisuje formę YAML 1.2. Z włączoną opcją Wielodokumentowy tablica wejściowa jest zrzucana jeden element na dokument i łączona separatorami---. - YAML → JSON:
jsyaml.loadAllparsuje każdy dokument w wejściu (automatycznie obsługując separatory---) do tablicy; wejścia jednodokumentowe są rozpakowywane tak, by wyjście JSON było samym dokumentem, a nie jednoelementową tablicą. - Wcięcie (2 lub 4 spacje) oraz formatowanie są konfigurowalne. Wyłączone formatowanie emituje zminifikowany JSON przez
JSON.stringify(value)bez białych znaków. - Wynik jest zapisywany do pola tekstowego tylko do odczytu. Przy błędach parsowania YAML komunikat zawiera 1-indeksowany wiersz i kolumnę raportowane przez
e.markzjs-yaml, więc można od razu skoczyć do błędu.
Dlaczego konwertować JSON i YAML tym narzędziem?
- Prywatność: każde parsowanie, transformacja i wyjście odbywa się w Twojej przeglądarce. Dane — w tym sekrety Kubernetes, podpisane JWT i własne konfiguracje — nigdy nie trafiają na nasze serwery.
- Wielodokumentowy YAML:
jsyaml.loadAllrozpoznaje separatory---i zwraca tablicę dokumentów, którą konwerter rozpakowuje dla pojedynczych dokumentów lub zachowuje jako tablicę JSON w przypadku wielodokumentowym. - Rozwiązywanie kotwic i aliasów: mechanizm
&anchor/*aliasw YAML obsługuje domyślny schematjs-yaml. Wartość zdefiniowana raz i przywołana dwukrotnie wraca do obiektu JSON, w którym wszystkie odniesienia mają równe wartości. - Bez CDN, bez telemetrii: biblioteka
js-yaml.min.jsjest serwowana z tego samego źródła co strona, więc narzędzie działa offline, za firmowymi proxy i w środowiskach odciętych od sieci.
Jakie są typowe zastosowania konwersji JSON ↔ YAML?
Przełączanie między JSON a YAML pojawia się w DevOps, inżynierii platformowej i narzędziach API:
- Manifesty Kubernetes: konwersja YAML
Deployment,ConfigMaplubHelmReleasedo JSON, aby wewnętrzny walidator polityk (Joi, Ajv, OPA Rego) mógł sprawdzić go programowo, a potem z powrotem do YAML do zastosowania w klastrze. - Workflowy CI/CD: obrót
workflow.ymlGitHub Actions przez JSON, aby generator kodu przepisał macierz lub zależności zadań, a następnie emisja czystego YAML do PR-a. - Specyfikacje OpenAPI: wklejenie JSON
openapi.jsonz autogenerowanej dokumentacji backendu i konwersja doopenapi.yamldla referencji edytowanej ręcznie i wrzuconej do repo.
Jak wygląda przykład pełnego obiegu JSON ↔ YAML?
Wklejenie {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} i naciśnięcie KONWERTUJ w trybie JSON → YAML produkuje osiem linii wciętego YAML z apiVersion: apps/v1 w pierwszej linii. Podanie tego YAML z powrotem w trybie YAML → JSON z włączonym formatowaniem zwraca pierwotny obiekt bajt po bajcie po stabilnym JSON.stringify(value, null, 2), z zachowaną kolejnością kluczy, ponieważ domyślny schemat js-yaml respektuje kolejność wstawiania w obu kierunkach.
Czy ten konwerter JSON ↔ YAML działa w całości w mojej przeglądarce?
Tak. Każde parsowanie, transformacja i emisja działają lokalnie jako JavaScript w karcie Twojej przeglądarki. Wbudowana biblioteka js-yaml jest serwowana z tego samego źródła co strona — bez CDN, bez fetch, bez XMLHttpRequest, bez navigator.sendBeacon na wejściu. Narzędzie działa też offline po wczytaniu strony, ponieważ jest to statyczny pakiet HTML/CSS/JS z biblioteką vendora obok. Sekrety Kubernetes, ładunki JWT, podpisane YAML-e CloudFormation i własne konfiguracje pozostają na Twoim urządzeniu.
Jak konwerter obsługuje wielodokumentowy YAML?
YAML obsługuje wiele dokumentów w jednym strumieniu rozdzielonych wierszami zawierającymi tylko ---. Przy YAML → JSON konwerter wywołuje jsyaml.loadAll, który zwraca każdy dokument jako wartość JavaScript. Jeśli znaleziono dokładnie jeden dokument, wyjściem JSON jest ten dokument bezpośrednio; jeśli dwa lub więcej — wyjściem jest tablica. Przy JSON → YAML, gdy wejście jest tablicą JSON ORAZ przełącznik Wielodokumentowy jest włączony, każdy element tablicy jest emitowany jako oddzielny dokument z separatorami --- między nimi — przydatne do generowania paczki gotowej dla kubectl apply z tablicy JSON zasobów.
Czy obsługiwane są kotwice i aliasy YAML?
Tak — definicje &anchor i odniesienia *alias są rozwiązywane przez domyślny schemat js-yaml w kroku wczytywania. Wejście YAML takie jak defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d parsuje się do obiektu JSON, w którym job_a i job_b zawierają retries: 3, timeout: 30. Klucz scalania << (rozszerzenie YAML 1.1, które js-yaml nadal honoruje) jest również obsługiwany w schemacie domyślnym.
Czy komentarze YAML są zachowywane przy konwersji do JSON i z powrotem?
Nie — js-yaml usuwa komentarze w kroku parsowania, więc obieg YAML → JSON → YAML traci każdą linię z prefiksem #. To znane ograniczenie modelu load/dump; jeśli zachowanie komentarzy jest krytyczne, użyj biblioteki świadomej komentarzy, takiej jak pakiet yaml z npm (oferuje API CST + AST zaprojektowane do zachowania trywii), zamiast js-yaml. Dla większości przepływów konfiguracyjnych kompromis jest do zaakceptowania: po obiegu YAML zachowuje każdy klucz, wartość, kotwicę i alias — tylko bez autorskich komentarzy.
Co się dzieje z niestandardowymi tagami YAML?
Konwerter używa DEFAULT_SCHEMA z js-yaml, który rozumie !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary i !!timestamp — każdy tag ze schematów core i JSON YAML 1.2. Niestandardowe lub aplikacyjne tagi (np. !Ref w CloudFormation, !vault w Ansible) nie są rozpoznawane i kończą się czytelnym błędem cytującym nieobsługiwany tag. Dla CloudFormation w szczególności użyj aws cloudformation package + --output-template-file, aby rozwinąć niestandardowe tagi przed wklejeniem do tego konwertera.
Ten konwerter JSON ↔ YAML ma js-yaml@4.1.0 dołączony z tego samego źródła, wspiera strumienie wielodokumentowe oraz kotwice/aliasy out of the box i raportuje błędy parsowania YAML z wierszem i kolumną, byś mógł poprawić źródło. Bez uploadu, bez CDN, bez telemetrii — każdy bajt zostaje w Twojej przeglądarce.