JSON-ից XML և հետ. գործնական փոխարկիչ երկու տվյալների աշխարհների համար
Ծրագրավորողների մեծ մասը աշխատում է և՛ XML-ի, և՛ JSON-ի հետ՝ ցանկանան թե ոչ։ Ժամանակակից վեբ API-ները գրեթե բացառապես խոսում են JSON-ով, բայց հենց դիպչում եք բանկին, ապահովագրական ընկերությանը, կառավարական endpoint-ի, ձեռնարկության ERP-ի, կամ հին SOAP ծառայության, XML-ը կրկին հայտնվում է։ Այս էջում JSON-ից XML փոխարկիչը վերածում է JSON-ը XML-ի և XML-ը հետ JSON-ի ուղիղ ձեր բրաուզերում, այնպես որ կարող եք շարժվել այս երկու ֆորմատների միջև՝ առանց զգայուն ծանրաբեռնվածությունները հեռակա ծառայության մեջ պատճենելու։

Ինչ իրականում են XML-ը և JSON-ը
XML-ը (Extensible Markup Language) markup ֆորմատ է, կառուցված ներդրված tag-երի, հատկանիշների և անունների տարածությունների շուրջ։ Այն նախագծված է փաստաթղթերի և կառուցվածքային տվյալների փոխանակման համար, և կրում է շատ մեխանիզմ. սխեմաներ (XSD), անունների տարածություններ, մշակման հրահանգներ, մեկնաբանություններ, CDATA հատվածներ, և պաշտոնական հայտարարություն վերևում։ Հենց այդ հարստությունն է պատճառը, թե ինչու XML-ը դեռ գերիշխում է legacy և ձեռնարկության համակարգերում։ Այն հանդիպում է SOAP վեբ ծառայություններում, RSS և Atom feed-երում, կոնֆիգուրացիայի ֆայլերում (Spring, Maven, .NET app config-ներ), գրասենյակային փաստաթղթերի ֆորմատներում, և ֆինանսական հաղորդագրության ստանդարտներում, ինչպիսիք են SWIFT-ը և ISO 20022-ը, որտեղ բանկերն ու ապահովագրողները շարունակում են ամեն օր XML փոխանակել։
JSON-ը (JavaScript Object Notation) շատ ավելի պարզ է. օբյեկտներ բանալի/արժեք զույգերով, զանգվածներ, տողեր, թվեր, բուլյան արժեքներ, և null։ Այն գրեթե մեկ առ մեկ քարտեզագրվում է գրեթե ամեն ծրագրավորման լեզվի տվյալների կառուցվածքների վրա, և հենց դա է պատճառը, թե ինչու այն տիրապետեց ժամանակակից վեբ API-ներին, REST endpoint-ներին, բջջային հավելվածներին, և կոնֆիգուրացիայի ֆայլերին, ինչպիսին է package.json-ը։ JSON-ը սովորաբար 30-ից 50 տոկոսով փոքր է, քան համարժեք XML-ը, և նկատելիորեն ավելի արագ է վերլուծվում, մասամբ, քանի որ բացառում է փակող tag-երն ու հատկանիշների մեխանիզմը, որոնք XML-ը ծանրաշարժ են դարձնում։
Հիմնական տարբերությունները, որ նշանակություն ունեն փոխարկման համար
Երկու ֆորմատները բավականաչափ համընկնում են, որպեսզի քարտեզագրվեն միմյանց վրա, բայց ոչ մաքուր կերպով։ Մի քանի կառուցվածքային տարբերություններ առաջացնում են գրեթե ամեն շփումը.
- Հատկանիշներ ընդդեմ երեխա հանգույցների։ XML-ը տարբերում է
<user id="1">(հատկանիշ) և<user><id>1</id></user>(երեխա տարր)։ JSON-ը նման հասկացություն չունի, ուստի փոխարկիչները հորինում են մեկը։ Ըստ պայմանագրության, հատկանիշները ծալվում են բանալու մեջ, ինչպիսին է@attributes-ը, կամ նախածանցվում են@-ով, մինչդեռ տարրի տեքստը հայտնվում է բանալու մեջ, ինչպիսին է#text-ը։ - Զանգվածներ։ JSON-ն ունի բնիկ զանգվածներ։ XML-ը՝ ոչ։ XML-ում ցանկը պարզապես նույն tag-ի կրկնությունն է, օրինակ՝ երեք
<item>տարրերի հաջորդականություն։ Փոխարկիչները պետք է կռահեն, թե երբ պետք է կրկնվող եղբայրները ծալվեն JSON զանգվածի, և երբ մեկ տարրը պետք է մնա հասարակ օբյեկտ։ - Անունների տարածություններ։ XML-ն օգտագործում է անունների տարածություններ (
xmlns:soapնախածանցները)՝ սխեմաների միջև անունների բախումներից խուսափելու համար։ JSON-ը ոչինչ համարժեք չունի, ուստի նախածանցները կամ գոյատևում են որպես բառացի նիշեր բանալիների ներսում, կամ հեռացվում են։ - Ծանրաշարժություն և մետատվյալներ։ XML-ը կարող է հանգույցին մետատվյալ ամրացնել հատկանիշների միջոցով. JSON-ն ամեն ինչ արտահայտում է որպես բանալիներ և արժեքներ։ Դա JSON-ն ավելի կոմպակտ և ընթեռնելի է դարձնում, մինչդեռ XML-ը պահպանում է վավերացման հզորությունը XSD սխեմաների միջոցով։
Փոխարկման նրբությունները, որ պետք է ուշադրության արժանացնել
JSON-ից XML-ի, XML-ից JSON-ի փոխադարձ ուղևորությունը և միանման արդյունքի սպասելը դասական սխալ է։ Փոխարկումը կորստյան է երկու ուղղություններով, եթե դուք չեք վերահսկում կանոնները։ Հիշեք սրանք.
- Հատկանիշները խեղաթյուրվում են։ JSON-ը XML փոխարկելիս, գործիքին կանոն է հարկավոր, թե որ բանալիները դառնում են հատկանիշ, և որոնք՝ տարր։ Հակառակ ուղղությամբ գնալիս, հատկանիշները պետք է ինչ-որ տեղ հայտնվեն, և այդ «ինչ-որ տեղը» (
@նախածանց,@attributesբլոկ) տարբերվում է գրադարանների միջև։ Եթե ներքևի հոսքի վերլուծիչը սպասում է այլ պայմանագրի, տվյալները սխալ տեսք ունեն, թեև ոչինչ չի կորել։ - Մեկ տարր ընդդեմ զանգվածի։ XML feed-ը մեկ
<item>-ով ստեղծում է JSON օբյեկտ. նույն feed-ը երկու item-ով ստեղծում է JSON զանգված։ Կոդը, որը ենթադրում է զանգված, կոտրվում է մեկ-item դեպքում։ Սա RSS-ի և SOAP-ի վերլուծման սխալների տարածված աղբյուր է։ - Անունների տարածությունները արտահոսում կամ վերանում են։ Կախված գործիքից,
soap:Body-ն կարող է դառնալ բանալի, որը բառացիորեն կոչվում էsoap:Body, կամ նախածանցը կարող է ամբողջովին հեռացվել՝ փոխելով փաստաթղթի իմաստը։ - Խառը բովանդակություն և տիպեր։ XML-ը ամեն ինչ վերաբերվում է որպես տեքստ, ուստի արժեք, ինչպիսին է
true-ն կամ42-ը, կարող է մնալ տող JSON-ի փոխարկվելուց հետո, մինչդեռ հակառակ ուղղությունը մեկնաբանությունների կամ CDATA-ի համար բնիկ տեղ չունի։

Ինչու է կարևոր միայն տեղական փոխարկումը
JSON-ը և XML-ի ծանրաբեռնվածությունները հաճախ ամենազգայուն բանն են, որ ծրագրավորողը մշակում է. API պատասխաններ token-ներով, SOAP հաղորդագրություններ հաշվեհամարներով, կոնֆիգուրացիայի ֆայլեր՝ հավատարմագրերով։ Փոխարկիչը, որն աշխատում է ձեր բրաուզերում, երբեք չի վերբեռնում այդ ամենից ոչինչ։ Վերլուծությունն ու սերիացումը կատարվում են ձեր մեքենայի վրա, ոչինչ չի ուղարկվում սերվեր, և կարող եք գործիքն օգտագործել offline, երբ էջը բեռնվել է։ Արտադրական տվյալները վրիպազերծելիս կամ ցանկացած համապատասխանության ռեժիմի ներքո, դա տարբերությունն է ապահով արագ ստուգման և պատահական տվյալների արտահոսքի միջև։
Եթե ձեզ հարկավոր է հետո կարգավորել արդյունքը, զուգակցեք սա մեր մյուս տվյալների փոխարկիչների հետ, կամ կարգավորեք ձեր ելքը JSON ձևակերպիչով, նախքան այն հաջորդ գործիքին հանձնելը ձեր pipeline-ում։
Հաճախ տրվող հարցեր
Փոխարկիչը վերբեռնու՞մ է իմ JSON-ը կամ XML-ը ինչ-որ տեղ։
Ոչ։ Ե՛վ JSON-ից XML, և՛ XML-ից JSON փոխարկումն ամբողջությամբ կատարվում է ձեր բրաուզերում։ Ձեր տվյալները երբեք չեն հեռանում ձեր սարքից, և գործիքն աշխատում է offline, էջը բեռնվելուց հետո։
Ինչպե՞ս են XML հատկանիշները մշակվում JSON փոխարկելիս։
XML հատկանիշները տեղադրվում են հատուկ բանալու մեջ, հաճախ նախածանցված at նշանով կամ խմբավորված attributes բլոկի տակ, քանի որ JSON-ը հատկանիշների բնիկ հասկացություն չունի։ Տարրի տեքստային բովանդակությունն առանձին է պահվում, որպեսզի երկուսն էլ վերապրեն փոխարկումը։
Ինչու՞ իմ մեկ XML տարրը դարձավ օբյեկտ, ոչ թե զանգված։
XML-ը բնիկ զանգվածներ չունի, ուստի ցանկը պարզապես կրկնվող tag է։ Երբ ներկա է միայն մեկ տարր, փոխարկիչները չեն կարող այն տարբերել սովորական օբյեկտից, ուստի այն դառնում է օբյեկտ։ Երկու կամ ավելի եղբայրներ նույն tag անունով ծալվում են JSON զանգվածի։
Ի՞նչ է պատահում XML անունների տարածություններին, ինչպիսիք են soap-ը կամ xmlns-ը։
JSON-ը XML անունների տարածությունների համարժեք չունի։ Կախված փոխարկումից, նախածանցը պահվում է որպես բառացի տեքստ բանալու ներսում, կամ հեռացվում է։ Ստուգեք ելքը, եթե ձեր ներքևի հոսքի սպառողը հենվում է անունների տարածության նախածանցների վրա։
Կարո՞ղ եմ JSON-ը հետ XML փոխարկել և ստանալ բնօրինակ փաստաթուղթը։
Ոչ միշտ ճշգրիտ։ Փոխարկումը կորստյան է երկու ուղղություններով, քանի որ XML հատկանիշները, ինչպիսիք են մեկնաբանությունները, CDATA-ն, և հատկանիշ-տարր տարբերությունը, JSON-ում մաքուր համարժեք չունեն։ Փոխադարձ ուղևորությունը լավագույնս աշխատում է, երբ դուք վերահսկում եք անվանման կանոնները երկու կողմերում։
Որտե՞ղ է XML-ը դեռ օգտագործվում JSON-ի համեմատ։
XML-ը ապրում է legacy և ձեռնարկության համակարգերում. SOAP վեբ ծառայություններ, RSS և Atom feed-եր, կոնֆիգուրացիայի ֆայլեր, և ֆինանսական հաղորդագրություններ, ինչպիսիք են SWIFT-ը և ISO 20022-ը։ JSON-ը գերիշխում է ժամանակակից վեբ API-ներում, REST endpoint-ներում և բջջային հավելվածներում։
