Skakel JSON na YAML en YAML na JSON om in jou blaaier
JSON en YAML beskryf dieselfde soort data — geneste kaarte, lyste, stringe, getalle, en booleans — maar hulle lyk baie verskillend en word op verskillende plekke gebruik. As jy enige tyd naby API's, houerlêers, of CI-pyplyne spandeer, moet jy uiteindelik een na die ander omskakel. Hierdie bladsy doen daardie omskakeling in albei rigtings, heeltemal binne jou blaaier, sodat die data wat jy plak nooit jou masjien verlaat nie.

Wat JSON is en waar dit gebruik word
JSON (JavaScript Object Notation) is 'n streng, hakies-en-krulhakie-formaat wat eerste vir masjiene gebou is. Elke objek word in {} toegedraai, elke skikking in [], sleutels en string-waardes word in dubbele aanhalingstekens gesit, en items word deur kommas geskei. Dit is die verstek-draadformaat vir REST- en GraphQL-API's, die liggaam van die meeste webhooks, die vorm van NoSQL-dokumente, en die ding wat jou fetch-oproep terugstuur. Byna elke taal ontleed dit uit die boks uit, wat presies is waarom dit die API-laag gewen het: JSON.parse in JavaScript, json in die Python-standaardbiblioteek, en ekwivalente oral anders. Die kompromie is dat JSON omslagtig is om met die hand te skryf en kommentaar verbied, dus is dit 'n swak formaat vir lêers wat 'n mens die hele dag redigeer.
Wat YAML is en waar dit gebruik word
YAML (YAML Ain't Markup Language) is ontwerp vir die teenoorgestelde prioriteit: mense eerste. Dit laat val die hakies en aanhalingstekens, gebruik inkeping om nesting uit te druk, en laat jou kommentaar skryf met #. Daardie leesbaarheid is waarom dit die lingua franca van konfigurasie geword het. Docker Compose-lêers, Kubernetes-manifeste, GitHub Actions- en GitLab CI-werkvloeie, Ansible-speelboeke, en talle app-konfigurasielêers is almal YAML. 'n Tipiese YAML-dokument is merkbaar korter as die ekwivalente JSON en baie makliker om te vergelyk in 'n trekversoek. Die koste van daardie elegansie is broosheid, wat is waar omskakeling interessant word.
Die sleutelverskille wat saak maak
Drie verskille dryf byna elke omskakelingsbesluit. Eerstens, witruimte is betekenisvol in YAML en betekenisloos in JSON. YAML gebruik spasies — nooit tabs nie — om struktuur aan te dui, dus kan 'n enkele verkeerd-belynde spasie stilweg die betekenis van 'n dokument verander. JSON gee glad nie om oor inkeping nie. Tweedens, YAML ondersteun kommentaar en JSON nie. Enige #-kommentaar in YAML verdwyn eenvoudig wanneer jy JSON produseer, omdat daar nêrens is om dit te sit nie. Derdens, YAML het ryker, implisiete tipering. Dit lees maklik datums, tydstempels, en null in verskeie spellings, en dit raai tipes van ongeaande waardes af. JSON het 'n klein, uitdruklike tipesteen geen dubbelsinnigheid nie. Let ook op dat JSON tegnies 'n deelversameling van YAML 1.2 is, wat is waarom geldige JSON gewoonlik skoon as YAML ontleed, maar die omgekeerde is nie gewaarborg nie.

Omskakelingslaggate om op te let
Heen-en-weer-omskakeling is nie altyd verliesvry nie, en dit help om te weet waar dinge breek:
- Die Noorweë-probleem. Onder YAML 1.1-reëls ontleed ongeaande
NOas die booleanfalse, enyes,on, enoffword ook booleans. 'n Landkode of 'n skakelbenaming kan natrue/falseomslaan voordat jy dit agterkom. Sit aanhalingstekens om waardes wat jy as stringe bedoel. - Getaldwang. 'n Weergawe soos
3.10kan sy agternul verloor en3.1word, en1.0word 'n getal selfs wanneer jy teks bedoel het. Sit aanhalingstekens om weergawestringe en ID's. - Ankers en aliasse verdwyn. YAML se
&anker- en*alias-verwysings het geen JSON-ekwivalent nie. 'n Goeie omskakelaar brei hulle uit na hul volle waarde, sodat die data korrek is maar die duplikaatverwydering verdwyn — JSON na YAML na JSON sal nie die oorspronklike ankers herbou nie. - Kommentaar en blokskalars. Kommentaar word laat val wanneer daar na JSON gegaan word. Multireël-blokskalars (
|en>) val ineen in gewone JSON-stringe met\n-ontsnappings, dus gaan die visuele formateringsbedoeling verlore. - Inkeping wanneer daar terug na YAML gegaan word. JSON kodeer nie inkeping nie, dus kies die omskakelaar 'n konsekwente styl. Hersien dit voordat jy dit in 'n tab-sensitiewe hulpmiddel plak.
Waarom slegs-plaaslik saak maak
Konfigurasielêers en API-ladings is presies die soort ding wat nie na 'n ewekansige bediener opgelaai moet word nie: hulle dra dikwels gasheername, tekens, interne diensname, of kliëntdata. Hierdie omskakelaar loop die ontleed-en-uitvoer-stap in jou blaaier met JavaScript. Niks word na 'n agterkant gestuur nie, niks word aangeteken nie, en die hulpmiddel werk vanlyn sodra die bladsy gelaai het. Plak 'n Kubernetes-geheim of 'n CI-werkvloei met vertroue dat dit op jou masjien bly.
Benodig jy verwante gereedskap? Blaai deur die volledige stel data-omskakelaars, maak wanordelike toevoer skoon met die JSON-formateerder, en kom terug hierheen wanneer jy ook al tussen die API-wêreld en die konfigurasiewêreld moet beweeg.
Gereelde vrae
Word my data iewers opgelaai?
Nee. Die omskakeling gebeur heeltemal in jou blaaier met plaaslike JavaScript. Jou JSON of YAML word nooit na 'n bediener gestuur nie, dus bly geheime en konfigurasielêers privaat.
Waarom het my YAML-waarde true of false onverwags verander?
YAML 1.1 behandel ongeaande woorde soos yes, no, on, en off as booleans — die Noorweë-probleem. Draai enige waarde wat jy as 'n string bedoel in aanhalingstekens toe sodat dit die omskakeling as teks oorleef.
Wat gebeur met my kommentaar wanneer ek YAML na JSON omskep?
JSON het geen kommentaarsintaksis nie, dus word alle hutjie-kommentaar tydens omskakeling verwyder. As jy notas moet behou, hou jou gesaghebbende kopie in YAML.
Word YAML-ankers en -aliasse behou?
Hulle word uitgebrei na hul volle waardes omdat JSON geen verwysingsmeganisme het nie. Die data bly korrek, maar die duplikaatverwydering is nie herwinbaar wanneer jy terug na YAML omskep nie.
Kan ek JSON na YAML sowel as YAML na JSON omskep?
Ja, die hulpmiddel werk in albei rigtings. Plak JSON om YAML te kry, of plak YAML om JSON te kry, en die omskakelaar herken en produseer die ander formaat.
Waarom breek YAML wanneer ek tabs gebruik?
YAML vereis spasies vir inkeping en verwerp tabs. As 'n plakking nie ontleed nie, vervang tab-karakters met spasies en hou inkeping konsekwent.
