Konvertálás JSON és YAML között
- Irányítópult
- Dokumentáció
- API
Mire jó ez a JSON / YAML konvertáló?
Ez az eszköz egy YAML dokumentumot JSON-ná alakít át és fordítva, megőrizve az adatszerkezetet (objektumok, tömbök, skalár típusok). A JSON-ból YAML-be, vagy a YAML-ből JSON-ba történő konvertálás gyakori művelet a fejlesztés során: OpenAPI YAML fájlt generálunk egy JSON specifikációból, egy REST API kimenetét YAML-be konvertáljuk, hogy beküldjük egy konfigurációs tárolóba, egy Kubernetes YAML manifesztet JSON-ba fordítunk, hogy átadjuk a kubectl --dry-run=client -o json parancsnak, vagy egy GitHub Actions munkafolyamatot igazítunk egy JSON sémához. Tágabb értelemben ez a híd az adatcsere világa (JSON) és a kézzel szerkeszthető konfiguráció világa (YAML) között.
YAML vs JSON: közvetlen összehasonlítás
A JSON és a YAML hasonló igényeket szolgál ki, de eltérő felhasználási esetekben. Az alábbi táblázat összefoglalja a főbb technikai különbségeket, amelyek segítenek a kettő közötti választásban a kontextustól függően.
| Szempont | JSON | YAML |
|---|---|---|
| Emberi olvashatóság | Közepes (kapcsos zárójelek, idézőjelek mindenhol) | Erős (behúzás, kevés írásjel) |
| Bőbeszédűség | Bőbeszédűbb | Tömörebb |
| Megjegyzések | Nem támogatott | Támogatott (# megjegyzés) |
| Több dokumentum egyetlen fájlban | Nem | Igen, a --- elválasztóval |
| Horgonyok és álnevek (újrafelhasználás) | Nem | Igen (&anchor és *anchor) |
| Típusrendszer | Szigorú (string, number, bool, null, array, object) | Implicit kényszerítés (yes, no, null, dátumok, értelmezett skalárok) |
| Értelmezési teljesítmény | Nagyon gyors, natív elemzők mindenhol | Lassabb, sokkal szélesebb nyelvtan |
| Elfogadás REST API-khoz | De facto szabvány | Ritka |
| Elfogadás konfigurációhoz | Ritka (kivéve package.json, tsconfig.json) |
De facto szabvány (Kubernetes, CI/CD, Ansible) |
Mikor használjunk JSON-t?
A JSON-t akkor kell használni, amikor egy program egy másik programmal beszél. Tipikus felhasználási esetei:
- REST és GraphQL API-k: kérés és válasz payloadok.
- Adatcsere mikroszolgáltatások és üzenetsorok között.
- Natív JavaScript kód:
JSON.parseésJSON.stringifyfüggőség nélkül. - Böngészőoldali tárolás:
localStorage,sessionStorage, IndexedDB. - AJAX és
fetchkérések. - Bináris vagy folyamorientált változatok: BSON (MongoDB), JSON Lines (naplók, ML adatkészletek), MessagePack.
- JS / TS eszközök konfigurációja:
package.json,tsconfig.json,composer.json.
Mikor használjunk YAML-t?
A YAML-t akkor kell használni, ha egy ember rendszeresen szerkeszti a fájlt. Tipikus felhasználási esetei:
- Docker Compose (
docker-compose.yml) és stack profilok. - Kubernetes manifesztek (Deployment, Service, Ingress, Helm chartok).
- Ansible playbookok és leltárak.
- CI/CD csővezetékek: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- OpenAPI / Swagger és AsyncAPI specifikációk.
- Annotált alkalmazáskonfiguráció (Symfony, Spring Boot, Rails), ahol a megjegyzések hasznosak.
- Gyakran kézzel szerkesztett fájlok, ahol a tömörség és az olvashatóság fontosabb az elemzési sebességnél.
Gyakori csapdák a YAML-ben
A YAML megengedőbb, mint a JSON, ami erőteljes, de csalóka formátummá teszi. A leggyakoribb csapdák:
- Behúzás: a tabulátorokat a specifikáció tiltja, csak a szóközök érvényesek. A kettő keverése vagy a szóközök számának megváltoztatása ugyanazon a blokkon belül megszakítja az elemzést.
- Skalárok automatikus kényszerítése:
yes,no,on,off,true,false,null,None,~logikai értékként vagy nullként kerülnek elemzésre. Példa csapda: egy idézőjel nélküli01234irányítószám az1234egésszé válik, és egyNOországkód (Norvégia)falselesz. Az ambiguus karakterláncokat mindig tegye idézőjelbe. - Többsoros karakterláncok: a
|(blokk literál) megőrzi a sortöréseket úgy, ahogy vannak, míg a>(összehajtott) a sortöréseket szóközökre cseréli. A-és+chomping indikátorok az utolsó sortörés viselkedését állítják be. - YAML 1.1 vs 1.2: az 1.1 (még mindig elterjedt, például alapértelmezés szerint a PyYAML-en keresztül) a
yes/no/on/off-ot logikai értékként kezeli, amit az 1.2 eltávolított. A viselkedés a 8-as alapú számoknál is eltér. - Implicit dátumok: a
2024-01-15idézőjelek nélkül egyes elemzők dátum objektumként értelmezik, nem karakterláncként.
Példák egymás mellett
Ugyanaz a dokumentum JSON-ban, majd YAML-ben kifejezve. Egy alkalmazás egyszerű konfigurációja függőségeivel és környezetével:
JSON verzió
{
"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
}
Egyenértékű YAML verzió
# Az alkalmazás konfigurációja
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
A YAML verzió körülbelül 25%-kal rövidebb karakterben, elfogad egy megjegyzést az elején, és úgy olvasható, mint a tulajdonságok listája szintaktikai zaj nélkül.
Hogyan használjuk a konvertálót
Az adatok konvertálásának lépései:
- Illessze be a forrásdokumentumot (JSON vagy YAML) a beviteli mezőbe.
- Válassza ki a kívánt konverziós irányt (JSON-ból YAML-be, vagy YAML-ből JSON-ba).
- Kattintson a konvertálás gombra: a formázott eredmény megjelenik a kimeneti területen.
- Ellenőrizze az eredményt, majd a másolás gombbal másolja az eredményt a vágólapra.
A konvertálás helyben történik a böngészőben vagy egy dedikált szerverútvonalon keresztül az eszközkészlettől függően: nem tárolunk érzékeny adatokat.
Gyakran ismételt kérdések
JSON-t vagy YAML-t használjak a konfigurációs fájljaimhoz?
Ha az ökoszisztéma megkövetel egy formátumot (Kubernetes YAML-t, package.json JSON-t), kövesse a konvenciót. Egyébként válassza a YAML-t a hosszú és annotált konfigurációkhoz, amelyeket kézzel szerkeszt, és a JSON-t a program által generált vagy kód által fogyasztott konfigurációkhoz. A hasznos megjegyzések jelenléte gyakran a döntő érv a YAML mellett.
Hogyan tarthatom meg a megjegyzéseket egy YAML -> JSON -> YAML körút során?
Nem tudja. A JSON nem támogatja a megjegyzéseket: amint a YAML-t JSON-ra konvertálja, a megjegyzések véglegesen elvesznek. A megjegyzések megőrzéséhez a programozott szerkesztés során használjon olyan elemzőt, amely megőrzi a formázást, például a Python ruamel.yaml könyvtárát körút módban, vagy kerülje el teljesen a JSON-on való áthaladást.
Miért elemződik megfelelően a YAML fájlom helyben, de bukik el élesben?
Gyakori okok: eltérő elemző verziók (YAML 1.1 vs 1.2), egy szerkesztő által bevezetett tabulátorok, idézőjel nélküli értékek, amelyek logikai értéknek (NO, off) vagy számnak (01234) tűnnek, fájlkódolás (rosszul kezelt UTF-8 BOM). Mindig tegye idézőjelbe az ambiguus karakterláncokat, és rögzítse az elemző verzióját a projektben.
A JSON a YAML részhalmaza?
A YAML 1.2 óta a gyakorlatban igen: minden érvényes JSON dokumentum egyben érvényes YAML 1.2 dokumentum is. Fordítva nem igaz: egy olyan YAML dokumentum, amely megjegyzéseket, horgonyokat, implicit dátumokat vagy több dokumentumot tartalmaz egy fájlban, nem fejezhető ki közvetlenül JSON-ban információvesztés nélkül.
Milyen alternatívákat érdemes ismerni a JSON és a YAML mellett?
TOML: népszerű konfigurációhoz (Cargo, pyproject.toml), jó kompromisszum az olvashatóság és az explicit gépelés között. INI: nagyon egyszerű, de nincs szabványos beágyazott szerkezete. XML: bőbeszédű, de továbbra is releváns a SOAP-hoz és bizonyos legacy Java konfigurációkhoz. HCL: a Terraform használja. JSON5 és JSONC: a JSON kiterjesztései, amelyek lehetővé teszik a megjegyzéseket és a záró vesszőket.
Mennyi a YAML súlya a JSON-hoz képest?
Egyenértékű szerkezet esetén a YAML általában 15-30%-kal rövidebb bájtokban, köszönhetően a kulcsok és a legtöbb karakterlánc körüli idézőjelek hiányának, valamint a kapcsos zárójelek hiányának. A hálózaton (HTTP átvitel) a minifikált JSON hasonló marad, de a YAML kompaktabb marad az olvasható verzióban. A tiszta elemzési teljesítmény érdekében a JSON többszörösen gyorsabb, ami igazolja használatát a nagy forgalmú API-khoz.
Kérés példa
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Bemeneti séma
| Mező | Típus | Kötelező | Alapértelmezett |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Végpontok
GET https://cdrn.fr/api/v1/tools- listázza az összes elérhető eszköztGET https://cdrn.fr/api/v1/tools/json-yaml-converter- lekéri ezen eszköz sémájátPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- végrehajtja ezen eszközt JSON payloaddal