YAML
Převodník YAML
Převod mezi YAML a JSON oběma směry.
O YAML a JSON
YAML a JSON popisují stejné struktury — mapy, seznamy, řetězce, čísla, pravdivostní hodnoty — jen jinou interpunkcí. YAML stojí na odsazení a píše se ručně; JSON je explicitní a je to formát, který většina API a knihoven skutečně zpracovává. Převod je z velké části mechanický, s tou výhradou, že YAML má funkce, jako jsou komentáře a kotvy, které JSON zkrátka neumí vyjádřit.
Pravidla typů v YAML jsou přísnější, než vypadají. Jako booleovské hodnoty se parsují jen true/false (a varianty jako True nebo TRUE) — yes, no, on a off zůstávají obyčejné řetězce, na rozdíl od některých starších parserů YAML, které je jako booleovské hodnoty rovněž zpracovávaly; tento nesoulad je online znám jako „norský problém“, protože kód země NO se mohl tiše proměnit na false. Častější překvapení tady se týká přesnosti: čísla v JSON jsou dvojitě přesná čísla s plovoucí desetinnou čárkou podle IEEE-754, takže 64bitové celé číslo nad 2^53 může v okamžiku převodu ztratit jednu nebo dvě číslice, i když byla původní hodnota v YAML přesná.
Kde se s tím setkáte
- Převod manifestu Kubernetes nebo souboru docker-compose na JSON pro skript
- Vložení odpovědi API do konfiguračního souboru, který očekává YAML
- Ověření, že se definice CI pipeline načítá tak, jak očekáváte
- Porovnání dvou konfiguračních formátů při přechodu mezi nástroji
Často kladené otázky
Co se stane s mými komentáři?
Zmizí. JSON nemá syntaxi pro komentáře, takže při převodu z YAML na JSON se každý řádek začínající # nenávratně ztratí. Pokud jsou komentáře důležité, ponechte si původní YAML.
Jsou podporované kotvy a aliasy?
Ano, ale rozvinou se na hodnotu, na kterou odkazují, protože JSON odkaz zachytit neumí. Aliasy odkazující na další aliasy rostou velmi rychle, a proto se převody, které by vedly k obrovskému dokumentu, odmítnou místo toho, aby se o ně systém pokoušel.
Ukládají se moje data?
Ne. Převod probíhá na serveru pouze pro tento jeden požadavek; poté se nic nezaznamenává ani neuchovává.
Proč se mi po převodu do JSON mírně změnilo velké celé číslo?
JSON reprezentuje všechna čísla jako dvojitě přesná čísla s plovoucí desetinnou čárkou podle IEEE-754 — stejný číselný typ, jaký používá JavaScript —, který dokáže celá čísla přesně obsáhnout jen do 2^53 (9 007 199 254 740 991). Hodnota v YAML, jako je 64bitové ID databáze nebo ID typu snowflake ve stylu Discordu, to může přesáhnout, a převod na číslo v JSON ji pak tiše zaokrouhlí. Pokud záleží na přesné přesnosti, ponechte takové hodnoty před převodem v uvozovkách jako řetězce YAML, aby prošly jako řetězce JSON, ne jako čísla.