Konvertuoti tarp JSON ir YAML

paverčia JSON į YAML (ir atvirkščiai), išlaikant struktūrą, su konfigūruojamu įtrauku. Praktiška konfigūracijos migravimui tarp .json ir .yaml failų

Kam skirtas šis JSON / YAML keitiklis?

Šis įrankis paverčia YAML dokumentą į JSON ir atvirkščiai, išsaugodamas duomenų struktūrą (objektus, lenteles, skaliarinius tipus). JSON konvertavimas į YAML arba YAML į JSON yra įprasta kūrimo operacija: sugeneruojame OpenAPI YAML failą iš JSON specifikacijos, konvertuojame REST API išvestį į YAML, kad įtrauktume ją į konfigūracijos saugyklą, verčiame Kubernetes YAML manifestą į JSON, kad perduotume jį į kubectl ---code -run arba jclien

YAML vs JSON: tiesioginis palyginimas

JSON ir YAML patenkina panašius poreikius, bet skirtingus naudojimo atvejus. Šioje lentelėje apibendrinti pagrindiniai techniniai skirtumai, naudingi renkantis vieną iš dviejų, atsižvelgiant į kontekstą.

Kriterijus JSON YAML
Žmogaus skaitomumas Vidutinis (skambučiai, kabutės visoje) Tvirtas (įtrauka, mažai skyrybos ženklų)
Išsamumas Daugiau žodžių Labiau
Komentarai Nepalaikoma Palaikoma (# komentaras)
Keli dokumentai viename faile Ne Taip, per skyriklį ---
Inkarai ir slapyvardžiai (pakartotinis naudojimas) Ne Taip (&inchor ir *inchor)
Tipo sistema Griežtas (eilutė, skaičius, prasmė, nulis, masyvas, objektas) Numanoma prievarta (taip, ne, nulis, datos, interpretuojami skaliarai)
Išnagrinėjimo našumas Labai greiti, vietiniai analizatoriai visur Lėtesnė, daug platesnė gramatika
Pritaikymas REST API De facto standartas Retas
Konfigūracijos priėmimas Retai (išskyrus package.json, tsconfig.json) De facto standartas (Kubernetes, CI/CD, Ansible)

Kada naudoti JSON?

JSON reikalingas kiekvieną kartą, kai programa bendrauja su kita programa. Įprasti jo naudojimo atvejai:

  • REST ir GraphQL API: užklausų ir atsakymų naudingosios apkrovos.
  • Duomenų mainai tarp mikro paslaugų ir pranešimų eilių.
  • Savasis JavaScript kodas: JSON.parse ir JSON.stringify be priklausomybių.
  • Naršyklės saugykla: localStorage, sessionStorage, IndexedDB.
  • AJAX ir pateikti užklausos.
  • Dvejetainiai arba į srautą orientuoti variantai: BSON (MongoDB), JSON linijos (žurnalai, ML duomenų rinkiniai), MessagePack.
  • JS / TS įrankių konfigūracija: package.json, tsconfig.json, composer.json.

Kada naudoti YAML?

YAML reikalinga, kai tik žmogus reguliariai redaguoja failą. Įprasti jo naudojimo atvejai:

  • Docker Compose (docker-compose.yml) ir sukrauti profilius.
  • Kubernetes aprašai (diegimo, aptarnavimo, įėjimo, vairo diagramos).
  • Galimos žaidimų knygos ir inventorius.
  • CI / CD kanalai: „GitHub Actions“, „GitLab CI“, „CircleCI“, „Bitbucket Pipelines“.
  • OpenAPI / Swagger ir AsyncAPI specifikacijos.
  • Anotuota programos konfigūracija (Symfony, Spring Boot, Rails), kur komentarai yra naudingi.
  • Failai, dažnai redaguojami ranka, kur glaustumas ir skaitomumas yra svarbesnis už analizavimo greitį.

Dažni YAML spąstai

YAML yra leistinesnis nei JSON, todėl jis yra galingas, bet klastingas formatas. Dažniausios klaidos:

  • Įtrauka: specifikacijos draudžia naudoti skirtukus, galioja tik tarpai. Sumaišius du arba pakeitus tarpų skaičių tame pačiame bloke, analizė nutrūksta.
  • Automatinė skaliarinė prievarta: taip, ne, įjungta, išjungta, teisinga, klaidinga, null, nėra, nuliai arba boolean. Spąstų pavyzdys: necituojamas pašto kodas 01234 tampa sveikuoju skaičiumi 1234, o šalies pavadinimas NE (Norvegija) tampa false. Visada dviprasmiškas eilutes įtraukite į kabutes.
  • Kelių eilučių eilutės: | (blokuoti literatūrą) išlaiko eilučių lūžius tokius, kokie yra, o > (sulankstyti) eilučių lūžius pakeičia tarpais. Peršokančios vėliavėlės - ir + koreguoja elgseną paskutiniame šuolyje.
  • YAML 1.1 prieš 1.2: 1.1 (vis dar labai įprasta, pavyzdžiui, pagal numatytuosius nustatymus naudojant PyYAML) taip/ne/įjungta/išjungta traktuoja kaip loginius duomenis, kuriuos 1.2 pašalino. Elgesys taip pat skiriasi nuo 8 bazinių skaičių.
  • Numanomos datos: 2024-01-15 be kabučių kai kurie analizatoriai interpretuoja kaip datos objektą, o ne kaip eilutę.

Gretimi pavyzdžiai

Tas pats dokumentas, išreikštas JSON, tada YAML. Paprasta programos konfigūracija su jos priklausomybėmis ir aplinka:

JSON versija

{
    "name": "cdrn-app",
    "versija": "1.14.2",
    "aplinka": "gamyba",
    "priklausomybės": {
        "php": "^8.3",
        "symfony/framework-bundle": "^7.0",
        "doktrina/orm": "^3.0"
    },
    "ypatybės": ["talpykla", "pašto siuntėjas", "eilė"],
    "debug": klaidinga
}

Lygiavertė YAML versija

# Programos konfigūracija
pavadinimas: cdrn-app
versija: 1.14.2
aplinka: gamyba
priklausomybės:
    php: '^8.3'
    symfony/framework-bundle: '^7.0'
    doktrina/orm: '^3.0'
funkcijos:
    - talpykla
    - laiškas
    - uodega
derinimas: false

YAML versija yra maždaug 25 % trumpesnė simbolių, priima pagrindinį komentarą ir skaitoma kaip savybių sąrašas be sintaksinio triukšmo.

Kaip naudotis konverteriu

Duomenų konvertavimo veiksmai:

  1. Įklijuokite šaltinio dokumentą (JSON arba YAML) į įvesties lauką.
  2. Pasirinkite norimą konversijos kryptį (JSON į YAML arba YAML į JSON).
  3. Spustelėkite konvertavimo mygtuką: suformatuotas rezultatas bus rodomas išvesties srityje.
  4. Patikrinkite atvaizdavimą, tada naudokite kopijavimo mygtuką, kad gautumėte rezultatą į mainų sritį.

Konvertavimas atliekamas vietoje jūsų naršyklėje arba per tam skirtą serverio maršrutą, priklausomai nuo įrankių: neskelbtini duomenys nesaugomi.

Dažnai užduodami klausimai

JSON arba YAML mano konfigūracijos failams?

Jei ekosistema nustato formatą (YAML „Kubernetes“, JSON – package.json), laikykitės taisyklės. Kitu atveju pirmenybę teikite YAML ilgoms, anotuotoms konfigūracijoms, kurias redaguojate rankiniu būdu, o JSON konfigūracijoms, kurias sugeneruoja programa arba naudoja kodas. Naudingų komentarų buvimas dažnai yra lemiamas argumentas YAML naudai.

Kaip išsaugoti komentarus per YAML į JSON į YAML kelionę pirmyn ir atgal?

Jūs negalite. JSON nepalaiko komentarų: kai tik konvertuosite YAML į JSON, komentarai prarandami visam laikui. Jei norite išsaugoti komentarus programinio redagavimo metu, naudokite analizatorių, kuris išsaugo formatavimą, pvz., ruamel.yaml Python režimu pirmyn ir atgal, arba visiškai nenaudokite JSON.

Kodėl mano YAML failas tinkamai išanalizuojamas vietoje, bet nepavyksta gamyboje?

Dažniausios priežastys: skirtingos analizatoriaus versijos (YAML 1.1 ir 1.2), redaktoriaus įvesti skirtukai, nekabutuotos reikšmės, kurios atrodo kaip loginės reikšmės (NO, off) arba skaičiai (01234), failų kodavimas (blogai tvarkoma UTF-8 BOM). Sistemingai cituokite dviprasmiškas eilutes ir nustatykite analizatoriaus versiją savo projekte.

Ar JSON yra YAML poaibis?

Nuo YAML 1.2, praktiškai taip: bet koks galiojantis JSON dokumentas yra galiojantis YAML 1.2 dokumentas. Priešingai yra klaidinga: YAML dokumentas, kuriame naudojami komentarai, prieraiščiai, numanomos datos arba keli dokumentai faile, negali būti tiesiogiai išreikšti JSON neprarandant informacijos.

Kokias JSON ir YAML alternatyvas turėtumėte žinoti?

TOML: populiarus konfigūracijose (Cargo, pyproject.toml), geras kompromisas tarp skaitomumo ir aiškaus įvedimo. INI: labai paprasta, bet nėra standartinės įdėtos struktūros. XML: išsamus, bet vis dar aktualus SOAP ir kai kurioms pasenusioms „Java“ konfigūracijoms. HCL: naudoja Terraform. JSON5 ir JSONC: JSON plėtiniai, leidžiantys komentuoti ir rašyti kablelius.

Koks YAML ir JSON svoris?

Lygiavertės struktūros atveju YAML paprastai yra 15–30 % trumpesnis baitais, nes aplink klavišus ir daugumą eilučių nėra kabučių ir skliaustų. Laidoje (HTTP transportavimas) sumažintas JSON išlieka palyginamas, tačiau YAML išlieka kompaktiškesnis skaitomoje versijoje. Dėl gryno našumo analizavimo pusėje JSON yra kelis kartus greitesnis, o tai pateisina jo naudojimą didelio srauto API.

Užklausos pavyzdys

curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"json":"...","space_tabulation":1}'

Įvesties schema

Laukas Tipas Privalomas Numatytasis
json text
space_tabulation integer

Galiniai taškai

  • GET https://cdrn.fr/api/v1/tools - išvardija visus galimus įrankius
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - gauna šio įrankio schemą
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - vykdo šį įrankį su JSON payload