Pretvoriti između JSON i YAML
- Nadzorna ploča
- Dokumentacija
- API
Čemu služi ovaj JSON/YAML pretvarač?
Ovaj alat pretvara YAML dokument u JSON i obrnuto, čuvajući strukturu podataka (objekti, tablice, skalarni tipovi). Konverzija JSON-a u YAML, ili YAML-a u JSON, uobičajena je operacija u razvoju: generiramo OpenAPI YAML datoteku iz JSON specifikacije, konvertiramo izlaz REST API-ja u YAML da ga predamo konfiguracijskom repozitoriju, prevodimo Kubernetes YAML manifest u JSON da ga proslijedimo kubectl --dry-run=client -o json ili poravnavamo GitHub tijek rada Radnje s JSON shemom. Šire gledano, to je most između svijeta razmjene podataka (JSON) i svijeta konfiguracije koja se može ručno uređivati (YAML).
YAML nasuprot JSON-u: izravna usporedba
JSON i YAML rješavaju slične potrebe, ali različite slučajeve upotrebe. Sljedeća tablica sažima glavne tehničke razlike, korisne za odabir između to dvoje ovisno o kontekstu.
| Kriterij | JSON | YAML |
|---|---|---|
| Ljudska čitljivost | Prosjek (uglaste zagrade, navodnici) | Jako (uvlaka, mala interpunkcija) |
| Opširnost | Više riječi | Sažetiji |
| Komentari | Nije podržano | Podržano (# komentar) |
| Više dokumenata u jednoj datoteci | Ne | Da, putem razdjelnika --- |
| Sidra i aliasi (ponovna upotreba) | Ne | Da (&anchor i *anchor) |
| Sustav tipa | Strogo (string, broj, bool, null, niz, objekt) | Implicitna prisila (da, ne, nula, datumi, interpretirani skalari) |
| Izvedba raščlambe | Vrlo brzi, izvorni parseri posvuda | Sporija, mnogo šira gramatika |
| Usvajanje za REST API-je | De facto standard | Rijetko |
| Usvajanje za konfiguraciju | Rijetko (osim package.json, tsconfig.json) |
De facto standard (Kubernetes, CI/CD, Ansible) |
Kada koristiti JSON?
JSON je potreban kad god program komunicira s drugim programom. Njegovi tipični slučajevi upotrebe:
- REST i GraphQL API-ji: sadržaj zahtjeva i odgovora.
- Razmjena podataka između mikroservisa i redova poruka.
- Nativni JavaScript kôd:
JSON.parseiJSON.stringifybez ovisnosti. - Pohrana na strani preglednika:
localStorage,sessionStorage, IndexedDB. - AJAX i
fetchzahtjevi. - Binarne ili varijante usmjerene na tok: BSON (MongoDB), JSON Lines (dnevnici, ML skupovi podataka), MessagePack.
- Konfiguracija JS / TS alata:
package.json,tsconfig.json,composer.json.
Kada koristiti YAML?
YAML je potreban čim čovjek redovito uređuje datoteku. Njegovi tipični slučajevi upotrebe:
- Docker Compose (
docker-compose.yml) i slaganje profila. - Kubernetes manifesti (Implementacija, Usluga, Ingress, Helm karte).
- Ansible playbooks and inventory.
- CI/CD cjevovodi: GitHub Actions, GitLab CI, CircleCI, Bitbucket cjevovodi.
- OpenAPI / Swagger i AsyncAPI specifikacije.
- Konfiguracija aplikacije s komentarima (Symfony, Spring Boot, Rails) gdje su komentari korisni.
- Datoteke koje se često uređuju ručno, gdje sažetost i čitljivost imaju prednost nad brzinom analize.
Uobičajene zamke u YAML-u
YAML je popustljiviji od JSON-a, što ga čini moćnim, ali podmuklim formatom. Najčešće zamke:
- Uvlačenje: specifikacijom su zabranjeni tabulatori, važeći su samo razmaci. Miješanje to dvoje ili promjena broja razmaka u istom bloku prekida raščlanjivanje.
- Automatsko skalarno prisiljavanje:
da,ne,on,off,true,false,null,None,~analiziraju se kao Booleovi ili null. Primjer zamke: poštanski broj01234bez navodnika postaje cijeli broj1234, a naziv zemljeNO(Norveška) postajefalse. Dvosmislene nizove uvijek stavite u navodnike. - Višeredni nizovi:
|(blokovni literal) zadržava prijelome redaka kakvi jesu, dok>(presavijen) zamjenjuje prijelome redaka razmacima. Zastavice žvakanja-i+prilagođavaju ponašanje pri završnom skoku. - YAML 1.1 nasuprot 1.2: 1.1 (još uvijek vrlo uobičajen, na primjer putem PyYAML-a prema zadanim postavkama) tretira
yes/no/on/offkao Booleove vrijednosti, koje je 1.2 uklonio. Ponašanje se također razlikuje prema brojevima baze 8. - Implicirani datumi:
2024-01-15bez navodnika neki parseri tumače kao objekt datuma, a ne kao niz.
Usporedni primjeri
Isti dokument, izražen u JSON-u pa u YAML-u. Jednostavna konfiguracija aplikacije s njezinim ovisnostima i okolinom:
JSON verzija
{
"ime": "cdrn-aplikacija",
"verzija": "1.14.2",
"okoliš": "proizvodnja",
"ovisnosti": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doktrina/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": netočno
}
Ekvivalentna YAML verzija
# Konfiguracija aplikacije
naziv: cdrn-app
verzija: 1.14.2
okolina: proizvodnja
ovisnosti:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doktrina/orm: '^3.0'
karakteristike:
- predmemorija
- poštar
- rep
debug: false
YAML verzija je oko 25% kraća u znakovima, prihvaća vodeći komentar i čita se kao popis svojstava bez sintaktičke buke.
Kako koristiti pretvarač
Koraci za pretvaranje podataka:
- Zalijepite svoj izvorni dokument (JSON ili YAML) u polje za unos.
- Odaberite željeni smjer konverzije (JSON u YAML ili YAML u JSON).
- Kliknite gumb za pretvaranje: formatirani rezultat pojavljuje se u izlaznom području.
- Provjerite prikaz, a zatim upotrijebite gumb za kopiranje da dohvatite rezultat u međuspremnik.
Pretvorba se provodi lokalno u vašem pregledniku ili putem namjenskog poslužitelja, ovisno o alatu: ne zadržavaju se osjetljivi podaci.
Često postavljana pitanja
JSON ili YAML za moje konfiguracijske datoteke?
Ako ekosustav nameće format (Kubernetes u YAML-u, package.json u JSON-u), slijedite konvenciju. U suprotnom, dajte prednost YAML-u za dugačke, označene konfiguracije koje uređujete ručno, a JSON za konfiguracije koje generira program ili konzumira kod. Prisutnost korisnih komentara često je odlučujući argument u korist YAML-a.
Kako zadržati komentare tijekom povratnog putovanja YAML u JSON u YAML?
Ne možete. JSON ne podržava komentare: čim pretvorite YAML u JSON, komentari se trajno gube. Kako biste sačuvali komentare tijekom programskog uređivanja, upotrijebite parser koji čuva formatiranje, poput ruamel.yaml u Pythonu u kružnom načinu rada ili u potpunosti izbjegavajte upotrebu JSON-a.
Zašto moja YAML datoteka analizira ispravno lokalno, ali ne uspijeva u proizvodnji?
Uobičajeni uzroci: različite verzije parsera (YAML 1.1 nasuprot 1.2), kartice koje je uveo uređivač, vrijednosti bez navodnika koje izgledaju kao Booleovi (NO, off) ili brojevi (01234), kodiranje datoteke (UTF-8 BOM se loše rukuje). Sustavno citirajte dvosmislene nizove i postavite verziju parsera u svom projektu.
Je li JSON podskup YAML-a?
Od YAML 1.2, da u praksi: svaki važeći JSON dokument je važeći YAML 1.2 dokument. Suprotno je lažno: YAML dokument koji koristi komentare, sidra, implicitne datume ili više dokumenata u datoteci ne može se izraziti izravno u JSON bez gubitka informacija.
Koje biste alternative za JSON i YAML trebali znati?
TOML: popularan za konfiguraciju (Cargo, pyproject.toml), dobar kompromis između čitljivosti i eksplicitnog tipkanja. INI: vrlo jednostavan, ali bez standardne ugniježđene strukture. XML: opširan, ali još uvijek relevantan za SOAP i neke naslijeđene Java konfiguracije. HCL: koristi ga Terraform. JSON5 i JSONC: JSON proširenja koja dopuštaju komentare i zareze na kraju.
Koja je težina YAML-a u odnosu na JSON?
Za ekvivalentnu strukturu, YAML je općenito 15 do 30% kraći u bajtovima, zahvaljujući odsutnosti navodnika oko ključeva i većine znakovnih znakova te odsutnosti vitičastih zagrada. Na žici (HTTP prijenos), umanjeni JSON ostaje usporediv, ali YAML ostaje kompaktniji u čitljivoj verziji. Za čistu izvedbu na strani parsiranja, JSON je nekoliko puta brži, što opravdava njegovu upotrebu za API-je s velikim prometom.
Primjer zahtjeva
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Ulazna shema
| Polje | Tip | Obavezno | Zadano |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Krajnje točke
GET https://cdrn.fr/api/v1/tools- ispisuje sve dostupne alateGET https://cdrn.fr/api/v1/tools/json-yaml-converter- dohvaća shemu ovog alataPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- izvršava ovaj alat s JSON payloadom