Pretvoriti između JSON i YAML

pretvara JSON u YAML (i obrnuto) uz čuvanje strukture, s konfigurabilnim uvlačenjem. Praktično za migraciju konfiguracije između .json i .yaml datoteka

Č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.parse i JSON.stringify bez ovisnosti.
  • Pohrana na strani preglednika: localStorage, sessionStorage, IndexedDB.
  • AJAX i fetch zahtjevi.
  • 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 broj 01234 bez navodnika postaje cijeli broj 1234, a naziv zemlje NO (Norveška) postaje false. 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/off kao Booleove vrijednosti, koje je 1.2 uklonio. Ponašanje se također razlikuje prema brojevima baze 8.
  • Implicirani datumi: 2024-01-15 bez 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:

  1. Zalijepite svoj izvorni dokument (JSON ili YAML) u polje za unos.
  2. Odaberite željeni smjer konverzije (JSON u YAML ili YAML u JSON).
  3. Kliknite gumb za pretvaranje: formatirani rezultat pojavljuje se u izlaznom području.
  4. 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 alate
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - dohvaća shemu ovog alata
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - izvršava ovaj alat s JSON payloadom