← Dukan kayan aiki

Mai Canza JSON zuwa YAML

Canza JSON zuwa YAML da YAML zuwa JSON nan take a bincikenka. Na gida ne kawai kuma na zaman kansa, tare da bayanai kan sharhi, nau'uka, shigarwa da anchors.

Mayar da JSON zuwa YAML da YAML zuwa JSON a mai binciken ka

JSON da YAML suna bayyana irin bayani ɗaya — taswirori masu hade-hade, jerurruka, jerin haruffa, lambobi, da ƙimar gaskiya — amma suna bayyana daban sosai kuma ana amfani da su a wurare daban-daban. Idan ka shafe lokaci kusa da API, fayilolin akwati (container), ko hanyoyin CI, a ƙarshe za ka bukaci mayar da ɗaya zuwa ɗaya. Wannan shafi yana yin wannan mayarwa a bangarori biyu, gaba ɗaya a cikin mai binciken ka, don haka bayanin da ka manna ba ya taɓa barin na'urarka.

Baka-bakan haske masu tsari-tsari suna canzawa zuwa matakan daidaitawa masu tsafta a kan bango mai duhun indigo
Tsarin JSON yana buɗewa zuwa YAML mai amfani da shigarwa (indentation).

Menene JSON kuma a ina ake amfani da ita

JSON (JavaScript Object Notation) tsari ne mai tsauri, na baka da lankwan, wanda aka gina don na'urori tun farko. Kowane abu an naɗe shi cikin {}, kowace jeri cikin [], maɓallai da darajojin jerin haruffa suna cikin alamun ƙididdiga biyu, kuma waƙafi ke raba abubuwa. Ita ce tsohon tsarin wire ga API na REST da GraphQL, jikin yawancin webhooks, siffar takardun NoSQL, da abin da fetch call ɗinka ke mayarwa. Kusan kowane harshe yana fassara ta kai tsaye, wanda shi ne dalilin da ya sa ta ci nasara a matakin API: JSON.parse a JavaScript, json a laburaren asali na Python, da irinsu a ko'ina. Farashi shi ne JSON tana da wahalar rubutawa da hannu kuma ta hana sharhi (comments), don haka ba kyakkyawan tsari ba ce ga fayilolin da mutum ke gyara tsawon rana.

Menene YAML kuma a ina ake amfani da ita

YAML (YAML Ain't Markup Language) an tsara ta don akasin fifiko: mutane tun farko. Tana zubar da baka da alamun ƙididdiga, tana amfani da shigarwa (indentation) don bayyana hade-hade, kuma tana barinka ka rubuta sharhi da #. Wannan sauƙin karantawa shi ne dalilin da ya sa ta zama harshen gama gari na daidaitawa (configuration). Fayilolin Docker Compose, takardun Kubernetes, hanyoyin GitHub Actions da GitLab CI, playbooks na Ansible, da fayilolin daidaita app da yawa duk YAML ne. Takardar YAML ta yau da kullum ta fi guntu sosai fiye da JSON dacewa da ita kuma tana da sauƙin diff a cikin pull request. Farashin wannan kyawun shi ne rauni, wanda shi ne inda mayarwa ke zama mai ban sha'awa.

Manyan bambance-bambancen da suka fi muhimmanci

Bambance-bambance uku ne ke tuka kusan kowace shawarar mayarwa. Na farko, fili mara kalma (whitespace) yana da muhimmanci a YAML kuma ba shi da wani ma'ana a JSON. YAML tana amfani da fili — ba wai tab ba — don nuna tsari, don haka fili ɗaya da bai daidaita ba zai iya canza ma'anar takardar a shiru. JSON ba ta damu da shigarwa ko kaɗan. Na biyu, YAML tana goyon bayan sharhi kuma JSON ba ta yi ba. Duk wani sharhi na # a YAML kawai yana ɓacewa lokacin da ka samar da JSON, domin babu inda za a sanya shi. Na uku, YAML tana da nau'ukan bayani mafi arziki, marasa fayyace. Tana karanta ranaku, lokutan (timestamps), da null a rubuce-rubuce daban-daban cikin farin ciki, kuma tana hasashen nau'ukan daga dara-daroji marasa alamun ƙididdiga. JSON tana da ƙaramin, tabbataccen tarin nau'ukan bayani da babu shakku. Ka lura kuma cewa JSON a fasaha wani ɓangare ne na YAML 1.2, wanda shi ne dalilin da ya sa JSON mai inganci yakan fassara cikin tsafta a matsayin YAML, amma akasin haka ba a tabbatar da shi ba.

Wani itace na bayanai mai hade-hade yana canzawa tsakanin tsare-tsare biyu masu haske a cyan da zinariya
Bayanai iri ɗaya an bayyana su a matsayin tsare-tsare biyu.

Matsalolin mayarwa da ya kamata a lura

Tafiya zuwa da dawowa ba koyaushe ba ta zama marar asara ba, kuma yana da amfani a san inda abubuwa ke karyewa:

  • Matsalar Norway. A ƙarƙashin dokokin YAML 1.1, NO mara alamun ƙididdiga tana fassara zuwa ƙimar gaskiya false, kuma yes, on, da off suma suna zama ƙimar gaskiya. Lambar ƙasa ko lakabin sauyawa (switch) na iya canzawa zuwa true/false kafin ka lura. Ka sanya alamun ƙididdiga ga darajojin da kake nufi a matsayin jerin haruffa.
  • Sauyawar lamba. Sigar kamar 3.10 na iya rasa sifili ɗin ta na ƙarshe ta zama 3.1, kuma 1.0 tana zama lamba ko da yake kana son rubutu. Ka sanya alamun ƙididdiga ga jerin sigogi da ID.
  • Anchors da aliases suna ɓacewa. Nassoshin &anchor da *alias na YAML ba su da wani abin da ya dace da su a JSON. Kyakkyawan mai mayarwa yana fadada su zuwa cikakkiyar darajarsu, don haka bayanin daidai ne amma an rasa rage-kwafi — JSON zuwa YAML zuwa JSON ba za ta sake gina anchors na asali ba.
  • Sharhi da block scalars. Ana zubar da sharhi lokacin da ake zuwa JSON. Block scalars masu layuka da yawa (| da >) suna rushewa zuwa jerin haruffa na JSON na yau da kullum tare da \n escapes, don haka manufar tsarin gani ta ɓace.
  • Shigarwa lokacin komawa zuwa YAML. JSON ba ta rubuta shigarwa, don haka mai mayarwa yana zaɓen salo mai daidaituwa. Ka duba shi kafin ka manna shi cikin kayan aikin da ke da hankali ga tab.

Me ya sa gida-kawai ke da muhimmanci

Fayilolin daidaitawa da payloads na API su ne ainihin irin abubuwan da bai kamata a loda su zuwa wani server na banza ba: galibi suna ɗauke da sunayen mai masaukin baki, alamu (tokens), sunayen aiyuka na ciki, ko bayanan abokin ciniki. Wannan mai mayarwa yana gudanar da matakin fassarawa-da-fitarwa a mai binciken ka da JavaScript. Babu abin da ake aikawa zuwa backend, babu abin da ake rikodi, kuma kayan aikin yana aiki ba tare da intanet ba da zarar shafin ya loda. Ka manna sirrin Kubernetes ko hanyar CI da tabbaci cewa yana zama a na'urarka.

Kana bukatar ƙarin kayan aiki masu alaƙa? Ka bincika cikakken tarin masu mayar da bayanai, ka tsaftace shigarwa mai cakuɗe da mai tsara JSON, kuma ka dawo nan duk lokacin da kake bukatar motsawa tsakanin duniyar API da duniyar daidaitawa.

Tambayoyin da ake yawan yi

Ana loda bayanaina zuwa wani wuri?

A'a. Mayarwar tana faruwa gaba ɗaya a mai binciken ka ta amfani da JavaScript na gida. Ba a taɓa aika JSON ko YAML ɗinka zuwa server ba, don haka sirri da fayilolin daidaitawa suna zama na kansu.

Me ya sa darajar YAML ɗina ta true ko false ta canza ba zato ba tsammani?

YAML 1.1 tana ɗaukan kalmomi marasa alamun ƙididdiga kamar yes, no, on, da off a matsayin ƙimar gaskiya — matsalar Norway. Ka naɗe duk wata darajar da kake nufi a matsayin jerin haruffa cikin alamun ƙididdiga domin ta tsira daga mayarwa a matsayin rubutu.

Me ke faruwa da sharhi na lokacin da na mayar da YAML zuwa JSON?

JSON ba ta da tsarin sharhi, don haka ana cire duk sharhin hash yayin mayarwa. Idan kana bukatar ka kiyaye bayanan, ka ajiye kwafinka na hukuma a YAML.

Ana kiyaye anchors da aliases na YAML?

Ana fadada su zuwa cikakkun darajojinsu domin JSON ba ta da wata hanyar nassoshi. Bayanin ya ci gaba da zama daidai, amma rage-kwafi ba za a iya dawo da shi ba lokacin da ka mayar da shi zuwa YAML.

Zan iya mayar da JSON zuwa YAML kamar yadda nake mayar da YAML zuwa JSON?

Eh, kayan aikin yana aiki a bangarori biyu. Ka manna JSON don samun YAML, ko ka manna YAML don samun JSON, kuma mai mayarwar yana gano ya kuma fitar da ɗayan tsarin.

Me ya sa YAML ke karyewa idan na yi amfani da tab?

YAML tana bukatar fili don shigarwa kuma tana ƙin tab. Idan mannawa ta kasa fassara, ka canza haruffan tab zuwa fili kuma ka kiyaye shigarwa mai daidaituwa.