Badilisha JSON kuwa YAML na YAML kuwa JSON kwenye kivinjari chako
JSON na YAML huelezea aina ile ile ya data — ramani zilizowekwa ndani ya kila kimoja, orodha, mfuatano wa maandishi, namba, na boolean — lakini zinaonekana tofauti sana na hutumika mahali tofauti. Kama unatumia muda wowote karibu na API, faili za kontena, au mifereji ya CI, hatimaye unahitaji kubadilisha moja kuwa nyingine. Ukurasa huu hufanya ubadilishaji huo pande zote mbili, kabisa ndani ya kivinjari chako, hivyo data unayobandika haiondoki kwenye mashine yako kamwe.

JSON ni nini na inapotumika
JSON (JavaScript Object Notation) ni muundo mkali, wa mabano na alama za kufunga, uliojengwa kwa ajili ya mashine kwanza. Kila kitu kimefungwa kwa {}, kila safu kwa [], funguo na thamani za mfuatano wa maandishi zina alama mbili za nukuu, na vipengele hutenganishwa na koma. Ndio muundo wa kawaida wa waya kwa API za REST na GraphQL, mwili wa webhook nyingi, umbo la hati za NoSQL, na kile ambacho ombi lako la fetch hurudisha. Karibu kila lugha hufasiri bila juhudi za ziada, na hiyo ndiyo hasa sababu ilishinda tabaka la API: JSON.parse katika JavaScript, json katika maktaba ya kawaida ya Python, na sawa zake kila mahali. Mzani ni kwamba JSON ni ndefu kuandika kwa mkono na huzuia maelezo (comments), hivyo ni muundo duni kwa faili ambazo binadamu huhariri siku nzima.
YAML ni nini na inapotumika
YAML (YAML Ain't Markup Language) ilibuniwa kwa kipaumbele kinyume: binadamu kwanza. Huondoa mabano na alama za nukuu, hutumia kujiingiza (indentation) kueleza kuwekwa ndani ya kila kimoja, na hukuruhusu kuandika maelezo kwa #. Usomekaji huo ndio sababu ikawa lugha ya pamoja ya usanidi. Faili za Docker Compose, hati za Kubernetes, mtiririko wa kazi wa GitHub Actions na GitLab CI, Ansible playbooks, na faili nyingi za usanidi wa programu zote ni YAML. Hati ya kawaida ya YAML ni fupi zaidi kwa kiasi kinachoonekana kuliko JSON sawa yake na ni rahisi zaidi kulinganisha (diff) katika ombi la kuunganisha (pull request). Bei ya uzuri huo ni udhaifu, ambapo ndipo ubadilishaji unakuwa wa kuvutia.
Tofauti kuu zinazohusika
Tofauti tatu huendesha karibu kila uamuzi wa ubadilishaji. Kwanza, nafasi tupu (whitespace) ni muhimu katika YAML na haina maana katika JSON. YAML hutumia nafasi — kamwe tabu — kuonyesha muundo, hivyo nafasi moja isiyolingana inaweza kubadilisha kimya kimya maana ya hati. JSON haijali kujiingiza kabisa. Pili, YAML husaidia maelezo na JSON haina. Maelezo yoyote ya # katika YAML hupotea tu unapotoa JSON, kwa sababu hakuna mahali pa kuweka. Tatu, YAML ina uandishi wa aina (typing) tajiri zaidi, wa kimyakimya. Husoma kwa furaha tarehe, alama za wakati, na null kwa maandishi kadhaa, na hukisia aina kutoka thamani zisizo na alama za nukuu. JSON ina seti ndogo, wazi ya aina na hakuna utata. Kumbuka pia kwamba JSON kitaalamu ni sehemu ndogo ya YAML 1.2, ndiyo sababu JSON sahihi kwa kawaida hufasiriwa vizuri kama YAML, lakini kinyume chake si hakikisho.

Mambo ya kuzingatia ya ubadilishaji
Mzunguko wa kwenda na kurudi si daima usiopoteza chochote, na inasaidia kujua wapi mambo huvunjika:
- Tatizo la Norway. Chini ya sheria za YAML 1.1,
NOisiyo na alama za nukuu hufasiriwa kama booleanfalse, nayes,on, naoffhuwa boolean pia. Msimbo wa nchi au lebo ya kubadilisha inaweza kubadilika kuwatrue/falsekabla hujaona. Weka alama za nukuu kwa thamani unazokusudia kama mfuatano wa maandishi. - Ulazimishaji wa namba. Toleo kama
3.10linaweza kupoteza sifuri yake ya mwisho na kuwa3.1, na1.0huwa namba hata pale ulipotaka maandishi. Weka alama za nukuu kwa mfuatano wa matoleo na vitambulisho. - Nanga na majina mbadala hupotea. Marejeleo ya YAML ya
&anchorna*aliashayana sawa yake katika JSON. Kibadilishaji kizuri hukwaza kuwa thamani zake kamili, hivyo data ni sahihi lakini upunguzaji wa marudio umepotea — JSON kwenda YAML kwenda JSON hautajenga upya nanga za asili. - Maelezo na block scalars. Maelezo huondolewa unapokwenda JSON. Block scalars za mistari mingi (
|na>) huanguka kuwa mfuatano wa kawaida wa maandishi wa JSON wenye alama za kutoroka za\n, hivyo nia ya mpangilio wa kuonekana hupotea. - Kujiingiza unaporudi kwenye YAML. JSON haisimbi kujiingiza, hivyo kibadilishaji huchagua mtindo thabiti. Kagua kabla ya kubandika kwenye zana inayotambua tabu.
Kwa nini uendeshaji wa ndani tu ni muhimu
Faili za usanidi na mizigo ya API ni hasa aina ya kitu ambacho hakipaswi kupakiwa kwenye seva ya nasibu: mara nyingi hubeba majina ya wenyeji (hostnames), tokeni, majina ya huduma za ndani, au data ya wateja. Kibadilishaji hiki huendesha hatua ya kufasiri-na-kutoa kwenye kivinjari chako kwa JavaScript. Hakuna kinachotumwa kwenye seva ya nyuma, hakuna kinachorekodiwa, na chombo hufanya kazi bila mtandao mara ukurasa unapopakia. Bandika siri ya Kubernetes au mtiririko wa kazi wa CI kwa uhakika kwamba unabaki kwenye mashine yako.
Unahitaji zana zinazohusiana? Vinjari seti kamili ya vibadilishaji vya data, safisha uingizaji uliochafuka kwa kiundaji cha JSON, na rudi hapa wakati wowote unahitaji kuhamia kati ya ulimwengu wa API na ulimwengu wa usanidi.
Maswali yanayoulizwa mara kwa mara
Je, data yangu inapakiwa mahali popote?
Hapana. Ubadilishaji hufanyika kabisa kwenye kivinjari chako kwa kutumia JavaScript ya ndani. JSON au YAML yako haitumwi kwenye seva kamwe, hivyo siri na faili za usanidi zinabaki za faragha.
Kwa nini thamani yangu ya YAML true au false ilibadilika bila kutarajiwa?
YAML 1.1 huchukulia maneno yasiyo na alama za nukuu kama yes, no, on, na off kama boolean — tatizo la Norway. Funga thamani yoyote unayokusudia kama mfuatano wa maandishi kwa alama za nukuu ili inusurike ubadilishaji kama maandishi.
Nini hutokea kwa maelezo yangu ninapobadilisha YAML kuwa JSON?
JSON haina muundo wa maelezo, hivyo maelezo yote ya hash huondolewa wakati wa ubadilishaji. Kama unahitaji kuhifadhi maelezo, weka nakala yako ya kiasili katika YAML.
Je, nanga na majina mbadala ya YAML yanahifadhiwa?
Hukwazwa kuwa thamani zake kamili kwa sababu JSON haina utaratibu wa marejeleo. Data inabaki sahihi, lakini upunguzaji wa marudio hauwezi kurejeshwa unapobadilisha kurudi kwenye YAML.
Je, ninaweza kubadilisha JSON kuwa YAML pamoja na YAML kuwa JSON?
Ndiyo, chombo hufanya kazi pande zote mbili. Bandika JSON kupata YAML, au bandika YAML kupata JSON, na kibadilishaji hutambua na kutoa muundo mwingine.
Kwa nini YAML huvunjika ninapotumia tabu?
YAML inahitaji nafasi kwa kujiingiza na inakataa tabu. Kama kubandika kunashindwa kufasiriwa, badilisha herufi za tabu na nafasi na uweke kujiingiza kuwa thabiti.
