Konvertēt starp JSON un YAML
- Vadības panelis
- Dokumentācija
- API
Kam paredzēts šis JSON/YAML pārveidotājs?
Šis rīks pārveido YAML dokumentu par JSON un otrādi, saglabājot datu struktūru (objektus, tabulas, skalārus tipus). JSON konvertēšana uz YAML vai YAML uz JSON ir izplatīta darbība izstrādes procesā: mēs ģenerējam OpenAPI YAML failu no JSON specifikācijas, mēs pārveidojam REST API izvadi par YAML, lai to ievietotu konfigurācijas krātuvē, mēs tulkojam Kubernetes YAML manifestu JSON formātā, lai to nodotu kubectl --clientalign. GitHub darbplūsmas darbības ar JSON shēmu. Plašāk runājot, tas ir tilts starp datu apmaiņas pasauli (JSON) un manuāli rediģējamu konfigurāciju (YAML).
YAML vs JSON: savstarpējs salīdzinājums
JSON un YAML risina līdzīgas vajadzības, taču atšķiras lietošanas gadījumi. Nākamajā tabulā ir apkopotas galvenās tehniskās atšķirības, kas ir noderīgas, izvēloties vienu no tām atkarībā no konteksta.
| Kritērijs | JSON | YAML |
|---|---|---|
| Cilvēka lasāmība | Vidējs (iekavās, pēdiņās visā) | Spēcīga (atkāpe, maz pieturzīmju) |
| Detalizētība | Pārrunīgāks | Konspektīvāk |
| Komentāri | Netiek atbalstīts | Atbalsts (# komentārs) |
| Vairāki dokumenti vienā failā | Nē | Jā, izmantojot atdalītāju --- |
| Enkuri un aizstājvārdi (atkārtota izmantošana) | Nē | Jā (&anchor un *enkurs) |
| Tips sistēma | Stingri (virkne, numurs, būtība, null, masīvs, objekts) | Netieša piespiešana (jā, nē, nulle, datumi, interpretētie skalāri) |
| Parsēšanas veiktspēja | Ļoti ātri, vietējie parsētāji visur | Lēnāka, daudz plašāka gramatika |
| Pieņemšana REST API | De facto standarts | Reti |
| Pieņemšana konfigurācijai | Reti (izņemot package.json, tsconfig.json) |
De facto standarts (Kubernetes, CI/CD, Ansible) |
Kad lietot JSON?
JSON ir nepieciešams ikreiz, kad programma sazinās ar citu programmu. Tās tipiskie lietošanas gadījumi:
- REST un GraphQL API: pieprasījumu un atbilžu lietderīgās slodzes.
- Datu apmaiņa starp mikropakalpojumiem un ziņojumu rindām.
- Vietējais JavaScript kods:
JSON.parseunJSON.stringifybez atkarībām. - Pārlūkprogrammas krātuve:
localStorage,sessionStorage, IndexedDB. - AJAX un
ienesespieprasījumi. - Bināri vai uz plūsmu orientēti varianti: BSON (MongoDB), JSON līnijas (žurnāli, ML datu kopas), MessagePack.
- JS/TS rīku konfigurācija:
package.json,tsconfig.json,composer.json.
Kad lietot YAML?
YAML ir nepieciešams, tiklīdz cilvēks regulāri rediģē failu. Tās tipiskie lietošanas gadījumi:
- Docker Compose (
docker-compose.yml) un sakraujiet profilus. - Kubernetes manifesti (izvietošanas, apkalpošanas, ienākšanas, stūres diagrammas).
- Iespējamas rokasgrāmatas un krājumi.
- CI/CD cauruļvadi: GitHub Actions, GitLab CI, CircleCI, Bitbucket cauruļvadi.
- OpenAPI/Swagger un AsyncAPI specifikācijas.
- Anotētas lietojumprogrammas konfigurācija (Symfony, Spring Boot, Rails), kur komentāri ir noderīgi.
- Faili, kas bieži tiek rediģēti ar roku, kur kodolīgums un lasāmība ir svarīgāki par parsēšanas ātrumu.
Bieži sastopamās nepilnības YAML
YAML ir pieļaujamāks nekā JSON, padarot to par spēcīgu, bet nodevīgu formātu. Visbiežāk sastopamās nepilnības:
- Atkāpe: specifikācijas aizliedz tabulēšanas izmantošanu, ir derīgas tikai atstarpes. Sajaucot abus vai mainot atstarpju skaitu vienā blokā, parsēšana tiek pārtraukta.
- Automātiska skalāra piespiešana:
jā,nē,ieslēgts,izslēgts,patiess,false,null,nav,nulles vai booles tiek parsētas kā ~. Slazda piemērs: pasta indekss01234bez pēdiņām kļūst par veselu skaitli1234, un valsts nosaukumsNO(Norvēģija) kļūst parfalse. Neviennozīmīgas virknes vienmēr iekļaujiet pēdiņās. - Daudzrindu virknes:
|(bloka burts) saglabā rindu pārtraukumus tādus, kādi tie ir, savukārt>(salocīts) rindiņas pārtraukumus aizstāj ar atstarpēm. Mainošie karodziņi-un+pielāgo darbību pēdējā lēcienā. - YAML 1.1 pret 1.2: 1.1 (joprojām ļoti bieži, piemēram, izmantojot PyYAML pēc noklusējuma) uzskata
jā/nē/ieslēgts/izslēgtskā Būla vērtības, kuras 1.2 noņēma. Uzvedība atšķiras arī no 8. bāzes skaitļiem. - Iedomātie datumi:
2024-01-15bez pēdiņām daži parsētāji interpretē kā datuma objektu, nevis kā virkni.
Blakus piemēri
Tas pats dokuments, kas izteikts JSON, pēc tam YAML. Vienkārša lietojumprogrammas konfigurācija ar tās atkarībām un vidi:
JSON versija
{
"name": "cdrn-app",
"versija": "1.14.2",
"vide": "ražošana",
"atkarības": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doktrīna/orm": "^3.0"
},
"funkcijas": ["kešatmiņa", "pasts", "rinda"],
"atkļūdošana": nepatiess
}
Ekvivalenta YAML versija
# Lietojumprogrammas konfigurācija
nosaukums: cdrn-app
versija: 1.14.2
vide: ražošana
atkarības:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doktrīna/orm: '^3.0'
funkcijas:
- kešatmiņa
- pastnieks
- asti
atkļūdošana: false
YAML versijai ir aptuveni par 25% mazākas rakstzīmes, tā pieņem vadošo komentāru un skan kā rekvizītu saraksts bez sintaktiskā trokšņa.
Kā lietot pārveidotāju
Datu konvertēšanas darbības:
- Ievades laukā ielīmējiet avota dokumentu (JSON vai YAML).
- Atlasiet vēlamo konversijas virzienu (JSON uz YAML vai YAML uz JSON).
- Noklikšķiniet uz konvertēšanas pogas: formatētais rezultāts tiek parādīts izvades apgabalā.
- Pārbaudiet atveidojumu un pēc tam izmantojiet kopēšanas pogu, lai izgūtu rezultātu starpliktuvē.
Konvertēšana tiek veikta lokāli jūsu pārlūkprogrammā vai izmantojot īpašu servera maršrutu atkarībā no rīkiem: sensitīvi dati netiek saglabāti.
Bieži uzdotie jautājumi
JSON vai YAML maniem konfigurācijas failiem?
Ja ekosistēma uzliek formātu (Kubernetes YAML, package.json JSON), ievērojiet noteikumus. Pretējā gadījumā dodiet priekšroku YAML garām, anotētām konfigurācijām, kuras rediģējat manuāli, un JSON konfigurācijām, kuras ģenerē programma vai ko patērē kods. Noderīgu komentāru klātbūtne bieži ir izšķirošais arguments par labu YAML.
Kā saglabāt komentārus, braucot turp un atpakaļ no YAML uz JSON uz YAML?
Tu nevari. JSON neatbalsta komentārus: tiklīdz YAML konvertējat uz JSON, komentāri tiek neatgriezeniski zaudēti. Lai saglabātu komentārus programmatiskās rediģēšanas laikā, izmantojiet parsētāju, kas saglabā formatējumu, piemēram, ruamel.yaml programmā Python turp un atpakaļ režīmā, vai arī pilnībā izvairieties no JSON izmantošanas.
Kāpēc mans YAML fails lokāli pareizi parsē, bet neizdodas ražošanā?
Bieži sastopamie cēloņi: dažādas parsētāja versijas (YAML 1.1 un 1.2), redaktora ieviestas cilnes, nekotētas vērtības, kas izskatās kā Būla vērtības (NO, off) vai cipari (01234), failu kodējums (UTF-8 BOM slikti apstrādāts). Sistemātiski citējiet neskaidras virknes un savā projektā iestatiet parsētāja versiju.
Vai JSON ir YAML apakškopa?
Kopš YAML 1.2, praksē jā: jebkurš derīgs JSON dokuments ir derīgs YAML 1.2 dokuments. Pretējs ir nepatiess: YAML dokumentu, kurā tiek izmantoti komentāri, enkuri, netieši datumi vai vairāki dokumenti failā, nevar tikt izteikts tieši JSON, nezaudējot informāciju.
Kādas JSON un YAML alternatīvas jums jāzina?
TOML: populārs konfigurācijā (Cargo, pyproject.toml), labs kompromiss starp lasāmību un nepārprotamu rakstīšanu. INI: ļoti vienkārša, taču nav standarta ligzdotas struktūras. XML: detalizēts, taču joprojām attiecas uz SOAP un dažām mantotām Java konfigurācijām. HCL: izmanto Terraform. JSON5 un JSONC: JSON paplašinājumi, kas pieļauj komentārus un beigu komatus.
Kāds ir YAML un JSON svars?
Līdzvērtīgai struktūrai YAML parasti ir par 15 līdz 30% īsāks baitos, jo ap taustiņiem un vairumam virkņu nav pēdiņu un nav iekavas. Vadā (HTTP transports) samazinātais JSON joprojām ir salīdzināms, bet YAML saglabājas kompaktāks lasāmā versijā. Lai nodrošinātu tīru veiktspēju parsēšanas pusē, JSON ir vairākas reizes ātrāks, kas attaisno tā izmantošanu lielas trafika API.
Pieprasījuma piemērs
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Ievades shēma
| Lauks | Tips | Obligāts | Noklusējums |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Endpoint
GET https://cdrn.fr/api/v1/tools- uzskaita visus pieejamos rīkusGET https://cdrn.fr/api/v1/tools/json-yaml-converter- iegūst šī rīka shēmuPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- izpilda šo rīku ar JSON payload