← Zana zote

Kibadilishaji cha JSON hadi XML

Badilisha JSON kuwa XML na XML kuwa JSON papo hapo kwenye kivinjari chako. Ndani ya kifaa tu na faragha, pamoja na maelezo ya attributes, arrays, namespaces na matatizo ya kawaida.

JSON kuwa XML na kurudi: kibadilishaji cha vitendo kwa walimwengu wawili wa data

Wasanidi wengi hufanya kazi na XML na JSON wote wawili wapende wasipende. API za wavuti za kisasa huzungumza JSON karibu pekee, lakini mara unapogusa benki, kampuni ya bima, tovuti ya serikali, ERP ya biashara kubwa, au huduma ya zamani ya SOAP, XML hujitokeza tena. Kibadilishaji cha JSON kuwa XML kwenye ukurasa huu hubadilisha JSON kuwa XML na XML kurudi kuwa JSON moja kwa moja kwenye kivinjari chako, hivyo unaweza kuhamia kati ya miundo hii miwili bila kunakili mizigo nyeti kwenye huduma ya mbali.

Mabano ya JSON yaliyowekwa ndani ya kila kimoja yanayong'aa yakibadilika kuwa mti wa lebo za XML zilizofungwa dhidi ya mandhari ya indigo iliyokolea
Vitu vya JSON na miti ya lebo za XML huelezea data ile ile kwa maumbo tofauti.

XML na JSON ni nini hasa

XML (Extensible Markup Language) ni muundo wa alama za kufunga uliojengwa kuzunguka lebo zilizowekwa ndani ya kila kimoja, sifa (attributes), na majina ya nafasi (namespaces). Ilibuniwa kwa ajili ya hati na kubadilishana data iliyopangwa, na hubeba mashine nyingi: skema (XSD), majina ya nafasi, maelekezo ya uchakataji, maelezo, sehemu za CDATA, na tamko rasmi juu kabisa. Utajiri huo ndio sababu XML bado inatawala katika mifumo ya zamani na ya biashara kubwa. Unaipata katika huduma za wavuti za SOAP, mifereji ya RSS na Atom, faili za usanidi (Spring, Maven, usanidi wa programu za .NET), miundo ya hati za ofisi, na viwango vya ujumbe wa kifedha kama SWIFT na ISO 20022, ambapo benki na makampuni ya bima huendelea kubadilishana XML kila siku.

JSON (JavaScript Object Notation) ni rahisi zaidi kwa kiasi kikubwa: vitu vyenye jozi za funguo/thamani, safu, mfuatano wa maandishi, namba, boolean, na null. Inalingana karibu moja kwa moja na miundo ya data ya karibu kila lugha ya kupanga, ndiyo hasa sababu ilichukua nafasi ya API za wavuti za kisasa, sehemu za mwisho za REST, programu za simu, na faili za usanidi kama package.json. JSON kwa kawaida ni ndogo zaidi kwa asilimia 30 hadi 50 kuliko XML sawa yake na hufasiriwa kwa kasi zaidi kwa kiasi kinachoonekana, kwa sehemu kwa sababu huondoa lebo za kufunga na mashine ya sifa zinazofanya XML kuwa ndefu.

Tofauti kuu zinazohusika katika ubadilishaji

Miundo hii miwili huingiliana vya kutosha kulinganishwa, lakini si kwa usafi. Tofauti chache za muundo husababisha karibu msuguano wote:

  • Sifa (attributes) dhidi ya nodi za mtoto (child nodes). XML hutofautisha kati ya <user id="1"> (sifa) na <user><id>1</id></user> (kipengele mtoto). JSON haina dhana kama hiyo, hivyo vibadilishaji huvumbua moja. Kwa mila, sifa hukunjwa kuwa funguo kama @attributes au kupewa kiambishi cha @, huku maandishi ya kipengele yakitua kwenye funguo kama #text.
  • Safu (arrays). JSON ina safu za asili. XML haina. Orodha katika XML ni lebo ile ile iliyorudiwa tu, kama vipengele vitatu vya <item> mfululizo. Vibadilishaji vinapaswa kufikiria wakati ndugu waliorudiwa wanapaswa kukunjwa kuwa safu ya JSON, na wakati kipengele kimoja kinapaswa kubaki kitu cha kawaida.
  • Majina ya nafasi (namespaces). XML hutumia majina ya nafasi (viambishi vya xmlns:soap) kuepuka migongano ya majina katika skema mbalimbali. JSON haina kitu sawa, hivyo viambishi hunusurika kama herufi halisi katika funguo au huondolewa.
  • Uzito na metadata. XML inaweza kuambatanisha metadata kwenye nodi kupitia sifa; JSON hueleza kila kitu kama funguo na thamani. Hilo linafanya JSON kuwa fupi zaidi na rahisi kusoma, huku XML ikihifadhi uwezo wa uthibitishaji kupitia skema za XSD.

Mambo ya kuzingatia ya ubadilishaji

Kuzunguka kwenda na kurudi kutoka JSON kwenda XML kwenda JSON na kutarajia matokeo sawa kabisa ndio kosa la kawaida. Ubadilishaji unapoteza data pande zote mbili isipokuwa uwe unadhibiti kanuni. Kumbuka haya:

  • Sifa huchafuka. Unapobadilisha JSON kuwa XML, chombo kinahitaji kanuni ya funguo zipi zinakuwa sifa dhidi ya vipengele. Unapoenda upande mwingine, sifa lazima zitue mahali fulani, na "mahali" hapo (kiambishi cha @, kizuizi cha @attributes) hutofautiana kati ya maktaba. Kama kifasiri cha chini kinachotarajia mila tofauti, data inaonekana isiyo sahihi ijapokuwa hakuna kilichopotea.
  • Kipengele kimoja dhidi ya safu. Mfereji wa XML wenye <item> moja hutoa kitu cha JSON; mfereji ule ule wenye vipengele viwili hutoa safu ya JSON. Msimbo unaodhania safu huvunjika katika hali ya kipengele kimoja. Hii ni chanzo cha kawaida cha hitilafu za kufasiri RSS na SOAP.
  • Majina ya nafasi huvuja au kupotea. Kulingana na chombo, soap:Body inaweza kuwa funguo iliyoitwa halisi soap:Body, au kiambishi kinaweza kuondolewa kabisa, kikibadilisha maana ya hati.
  • Maudhui yaliyochanganyika na aina. XML huchukulia kila kitu kama maandishi, hivyo thamani kama true au 42 inaweza kubaki mfuatano wa maandishi baada ya kubadilishwa kuwa JSON, huku upande mwingine ukikosa mahali pa asili pa maelezo au CDATA.
Miti miwili ya data iliyopangwa ikiunganishwa na nodi za alama za kufunga za kufikirika zilizotengenezwa kwa mwanga wa samawati na dhahabu
Kuunganisha kati ya miundo humaanisha kuamua jinsi sifa, safu, na majina ya nafasi yanavyofasiriwa.

Kwa nini ubadilishaji wa ndani tu ni muhimu

Mizigo ya JSON na XML mara nyingi ndicho kitu nyeti zaidi ambacho msanidi hushughulikia: majibu ya API yenye tokeni, ujumbe wa SOAP wenye namba za akaunti, faili za usanidi zenye vitambulisho. Kibadilishaji kinachofanya kazi kwenye kivinjari chako hakiwahi kupakia chochote cha hayo. Ufasiri na uandishi hufanyika kwenye mashine yako, hakuna kinachotumwa kwenye seva, na unaweza kutumia chombo bila mtandao mara ukurasa unapopakia. Kwa uchunguzi wa data ya uzalishaji au chochote chini ya utawala wa uzingatiaji (compliance), hiyo ni tofauti kati ya ukaguzi wa haraka salama na uvujaji wa data usiotarajiwa.

Kama unahitaji kusafisha matokeo baadaye, unganisha hii na vibadilishaji vyetu vingine vya data, au safisha matokeo yako na kiundaji cha JSON kabla ya kukikabidhi kwenye chombo kinachofuata katika mfereji wako.

Maswali yanayoulizwa mara kwa mara

Je, kibadilishaji hupakia JSON au XML yangu mahali popote?

Hapana. Ubadilishaji wote wa JSON kuwa XML na XML kuwa JSON hufanyika kabisa kwenye kivinjari chako. Data yako haiondoki kwenye kifaa chako kamwe na chombo hufanya kazi bila mtandao baada ya ukurasa kupakia.

Sifa za XML hushughulikiwaje zinapobadilishwa kuwa JSON?

Sifa za XML huwekwa kwenye funguo maalum, kwa kawaida ikiwa na kiambishi cha alama ya at au kukusanywa chini ya kizuizi cha sifa, kwa kuwa JSON haina dhana ya asili ya sifa. Maudhui ya maandishi ya kipengele huhifadhiwa tofauti ili yote mawili yanusurike ubadilishaji.

Kwa nini kipengele changu kimoja cha XML kikawa kitu badala ya safu?

XML haina safu za asili, hivyo orodha ni lebo iliyorudiwa tu. Kipengele kimoja kikiwepo, vibadilishaji haviwezi kukitofautisha na kitu cha kawaida, hivyo huwa kitu. Ndugu wawili au zaidi wenye jina la lebo lile lile hukunjika kuwa safu ya JSON.

Nini hutokea kwa majina ya nafasi ya XML kama soap au xmlns?

JSON haina sawa yake ya majina ya nafasi ya XML. Kulingana na ubadilishaji, kiambishi hubaki kama maandishi halisi ndani ya funguo au huondolewa. Angalia matokeo kama mtumiaji wako wa chini anategemea viambishi vya majina ya nafasi.

Je, ninaweza kubadilisha JSON kurudi kuwa XML na kupata hati ya asili?

Si daima kwa usahihi kamili. Ubadilishaji unapoteza data pande zote mbili kwa sababu vipengele vya XML kama maelezo, CDATA, na tofauti ya sifa dhidi ya kipengele havina sawa safi ya JSON. Mzunguko wa kwenda na kurudi hufanya kazi vizuri zaidi unapodhibiti kanuni za majina pande zote mbili.

XML bado inatumika wapi ikilinganishwa na JSON?

XML inaishi katika mifumo ya zamani na ya biashara kubwa: huduma za wavuti za SOAP, mifereji ya RSS na Atom, faili za usanidi, na ujumbe wa kifedha kama SWIFT na ISO 20022. JSON inatawala API za wavuti za kisasa, sehemu za mwisho za REST, na programu za simu.