Konwertuj między JSON i YAML
- Panel
- Dokumentacja
- API
Do czego służy ten konwerter JSON / YAML?
To narzędzie przekształca dokument YAML w JSON i odwrotnie, zachowując strukturę danych (obiekty, tablice, typy skalarne). Konwersja JSON na YAML lub YAML na JSON to częsta operacja w programowaniu: generuje się plik OpenAPI YAML ze specyfikacji JSON, konwertuje wyjście API REST na YAML, aby zacommitować je w repozytorium konfiguracji, tłumaczy manifest Kubernetes YAML na JSON, aby przekazać go do kubectl --dry-run=client -o json, lub wyrównuje workflow GitHub Actions ze schematem JSON. Szerzej, to most między światem wymiany danych (JSON) a światem ręcznie edytowanej konfiguracji (YAML).
YAML vs JSON: bezpośrednie porównanie
JSON i YAML adresują podobne potrzeby, ale różne przypadki użycia. Poniższa tabela podsumowuje główne różnice techniczne, przydatne do wyboru między nimi w zależności od kontekstu.
| Kryterium | JSON | YAML |
|---|---|---|
| Czytelność dla człowieka | Średnia (nawiasy klamrowe, cudzysłowy wszędzie) | Wysoka (wcięcie, mało interpunkcji) |
| Gadatliwość | Bardziej gadatliwy | Bardziej zwięzły |
| Komentarze | Nieobsługiwane | Obsługiwane (# commentaire) |
| Wiele dokumentów w jednym pliku | Nie | Tak, przez separator --- |
| Anchory i aliasy (ponowne użycie) | Nie | Tak (&anchor i *anchor) |
| System typów | Ścisły (string, number, bool, null, array, object) | Implicytna koercja (yes, no, null, daty, interpretowane skalary) |
| Wydajność parsowania | Bardzo szybka, natywne parsery wszędzie | Wolniejsza, znacznie szersza gramatyka |
| Adopcja dla API REST | Standard de facto | Rzadko |
| Adopcja dla konfiguracji | Rzadko (poza package.json, tsconfig.json) |
Standard de facto (Kubernetes, CI/CD, Ansible) |
Kiedy używać JSON?
JSON nadaje się, gdy program komunikuje się z innym programem. Jego typowe przypadki użycia:
- API REST i GraphQL: payloady żądań i odpowiedzi.
- Wymiana danych między mikroserwisami i kolejkami wiadomości.
- Natywny kod JavaScript:
JSON.parseiJSON.stringifybez zależności. - Przechowywanie po stronie przeglądarki:
localStorage,sessionStorage, IndexedDB. - Żądania AJAX i
fetch. - Warianty binarne lub strumieniowe: BSON (MongoDB), JSON Lines (logi, datasety ML), MessagePack.
- Konfiguracja narzędzi JS / TS:
package.json,tsconfig.json,composer.json.
Kiedy używać YAML?
YAML nadaje się, gdy człowiek regularnie edytuje plik. Jego typowe przypadki użycia:
- Docker Compose (
docker-compose.yml) i profile stacków. - Manifesty Kubernetes (Deployment, Service, Ingress, Helm charts).
- Playbooki Ansible i inwentarze.
- Pipeliny CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- Specyfikacje OpenAPI / Swagger i AsyncAPI.
- Konfiguracja aplikacyjna z adnotacjami (Symfony, Spring Boot, Rails), gdzie komentarze są przydatne.
- Pliki edytowane często ręcznie, gdzie zwięzłość i czytelność mają pierwszeństwo nad szybkością parsowania.
Częste pułapki w YAML
YAML jest bardziej permisywny niż JSON, co czyni go potężnym, ale podstępnym formatem. Najczęstsze pułapki:
- Wcięcie: tabulacje są zabronione przez specyfikację, tylko spacje są prawidłowe. Mieszanie obu lub zmiana liczby spacji w tym samym bloku psuje parsowanie.
- Automatyczna koercja skalarów:
yes,no,on,off,true,false,null,None,~są parsowane jako booleany lub null. Przykład pułapki: kod pocztowy01234bez cudzysłowów staje się liczbą całkowitą1234, a nazwa krajuNO(Norwegia) staje sięfalse. Zawsze umieszczaj w cudzysłowach niejednoznaczne ciągi. - Stringi wielolinijkowe:
|(block literal) zachowuje znaki nowej linii bez zmian, podczas gdy>(folded) zastępuje znaki nowej linii spacjami. Wskaźniki chomping-i+dostosowują zachowanie ostatniego znaku nowej linii. - YAML 1.1 vs 1.2: 1.1 (wciąż bardzo rozpowszechniona, na przykład przez PyYAML domyślnie) traktuje
yes/no/on/offjako booleany, co 1.2 usunęła. Zachowania różnią się też dla liczb w systemie ósemkowym. - Implicytne daty:
2024-01-15bez cudzysłowów jest interpretowane jako obiekt daty przez niektóre parsery, a nie jako ciąg.
Przykłady obok siebie
Ten sam dokument wyrażony w JSON, a następnie w YAML. Prosta konfiguracja aplikacji z jej zależnościami i środowiskiem:
Wersja JSON
{
"name": "cdrn-app",
"version": "1.14.2",
"environment": "production",
"dependencies": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": false
}
Równoważna wersja YAML
# Configuration de l'application
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doctrine/orm: '^3.0'
features:
- cache
- mailer
- queue
debug: false
Wersja YAML jest o około 25% krótsza w znakach, akceptuje komentarz na początku i czyta się jak listę właściwości bez składniowego szumu.
Jak korzystać z konwertera
Kroki do konwersji twoich danych:
- Wklej swój dokument źródłowy (JSON lub YAML) w polu wprowadzania.
- Wybierz pożądany kierunek konwersji (JSON na YAML lub YAML na JSON).
- Kliknij przycisk konwersji: sformatowany wynik pojawia się w obszarze wyjścia.
- Sprawdź rendering, a następnie użyj przycisku kopiowania, aby przenieść wynik do schowka.
Konwersja jest wykonywana lokalnie w twojej przeglądarce lub przez dedykowaną trasę serwera, w zależności od tooling: żadne wrażliwe dane nie są przechowywane.
Najczęściej zadawane pytania
JSON czy YAML dla moich plików konfiguracyjnych?
Jeśli ekosystem narzuca format (Kubernetes w YAML, package.json w JSON), podążaj za konwencją. W przeciwnym razie preferuj YAML dla długich i opatrzonych adnotacjami konfiguracji, które edytujesz ręcznie, a JSON dla konfiguracji generowanych przez program lub konsumowanych przez kod. Obecność użytecznych komentarzy jest często rozstrzygającym argumentem na rzecz YAML.
Jak zachować komentarze podczas round-trip YAML na JSON na YAML?
Nie można. JSON nie obsługuje komentarzy: gdy konwertujemy YAML na JSON, komentarze są tracone definitywnie. Aby zachować komentarze podczas edycji programistycznych, użyj parsera, który zachowuje formatowanie, takiego jak ruamel.yaml w Pythonie w trybie round-trip, lub całkowicie unikaj przechodzenia przez JSON.
Dlaczego mój plik YAML parsuje się poprawnie lokalnie, ale zawodzi w produkcji?
Częste przyczyny: różne wersje parsera (YAML 1.1 vs 1.2), tabulacje wprowadzone przez edytor, wartości bez cudzysłowów, które przypominają booleany (NO, off) lub liczby (01234), kodowanie pliku (źle obsłużony UTF-8 BOM). Systematycznie umieszczaj w cudzysłowach niejednoznaczne ciągi i ustal wersję parsera w swoim projekcie.
Czy JSON jest podzbiorem YAML?
Od YAML 1.2 tak w praktyce: każdy prawidłowy dokument JSON jest prawidłowym dokumentem YAML 1.2. Odwrotność jest fałszywa: dokument YAML, który używa komentarzy, anchorów, implicytnych dat lub kilku dokumentów w pliku, nie może być bezpośrednio wyrażony w JSON bez utraty informacji.
Jakie alternatywy dla JSON i YAML warto znać?
TOML: popularny do konfiguracji (Cargo, pyproject.toml), dobry kompromis czytelność i jawne typowanie. INI: bardzo proste, ale brak standardowej zagnieżdżonej struktury. XML: gadatliwy, ale wciąż istotny dla SOAP i niektórych konfiguracji Java legacy. HCL: używany przez Terraform. JSON5 i JSONC: rozszerzenia JSON pozwalające na komentarze i przecinki końcowe.
Jaka jest waga YAML vs JSON?
Przy równoważnej strukturze YAML jest zazwyczaj 15 do 30% krótszy w bajtach, dzięki brakowi cudzysłowów wokół kluczy i większości ciągów oraz brakowi nawiasów klamrowych. Na drucie (transport HTTP) zminifikowany JSON pozostaje porównywalny, ale YAML pozostaje bardziej zwarty w czytelnej wersji. Dla czystej wydajności po stronie parsowania JSON jest kilkukrotnie szybszy, co uzasadnia jego użycie dla API o dużym ruchu.
Przykładowe zapytanie
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Schemat wejściowy
| Pole | Typ | Wymagane | Domyślnie |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Punkty końcowe
GET https://cdrn.fr/api/v1/tools- lista wszystkich dostępnych narzędziGET https://cdrn.fr/api/v1/tools/json-yaml-converter- zwraca schemat dla tego narzędziaPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- uruchamia to narzędzie z payloadem JSON