Փոխարկեք JSON-ը YAML-ի և YAML-ը JSON-ի՝ ձեր բրաուզերում
JSON-ը և YAML-ը նկարագրում են նույն տեսակի տվյալները — ներդրված քարտեզներ, ցանկեր, տողեր, թվեր և բուլյան արժեքներ — բայց դրանք տարբեր տեսք ունեն և օգտագործվում են տարբեր վայրերում։ Եթե ժամանակ եք անցկացնում API-ների, կոնտեյների ֆայլերի կամ CI գործընթացների մոտ, ի վերջո ձեզ հարկավոր է լինում մեկը մյուսի վերածել։ Այս էջն այդ փոխարկումն անում է երկու ուղղություններով, ամբողջությամբ ձեր բրաուզերում, այնպես որ ձեր տեղադրած տվյալները երբեք չեն հեռանում ձեր մեքենայից։

Ինչ է JSON-ը և որտեղ է այն ապրում
JSON-ը (JavaScript Object Notation) խիստ, փակագծերով և ուղիղ փակագծերով ֆորմատ է, կառուցված նախևառաջ մեքենաների համար։ Ամեն օբյեկտ փաթեթավորված է {}-ի մեջ, ամեն զանգված՝ []-ի, բանալիներն ու տողային արժեքները կրկնակի չակերտների մեջ են, և տարրերն առանձնացվում են ստորակետերով։ Այն REST և GraphQL API-ների կանխադրված փոխադրման ֆորմատն է, webhook-ների մեծ մասի մարմինը, NoSQL փաստաթղթերի ձևը, և ձեր fetch կանչի վերադարձնող բանը։ Գրեթե ամեն լեզու այն վերլուծում է հենց այնպես, և հենց դա էլ պատճառն է, թե ինչու հաղթեց API շերտում. JSON.parse JavaScript-ում, json Python-ի ստանդարտ գրադարանում, և համարժեքներ ամենուր։ Փոխզիջումն այն է, որ JSON-ը ձեռքով գրելու համար ծանրաշարժ է և արգելում է մեկնաբանություններ, ուստի այն վատ ֆորմատ է ֆայլերի համար, որոնք մարդն ամբողջ օրը խմբագրում է։
Ինչ է YAML-ը և որտեղ է այն ապրում
YAML-ը (YAML Ain't Markup Language) նախագծված է հակառակ առաջնահերթությամբ. մարդիկ առաջինը։ Այն նետում է փակագծերն ու չակերտները, օգտագործում ինդենտացիա՝ ներդրվածությունն արտահայտելու համար, և թույլ է տալիս գրել մեկնաբանություններ #-ով։ Հենց այդ ընթեռնելիությունն է, որ այն դարձրեց կոնֆիգուրացիայի ընդհանուր լեզուն։ Docker Compose ֆայլերը, Kubernetes մանիֆեստները, GitHub Actions և GitLab CI աշխատանքային հոսքերը, Ansible playbook-ները, և անհամար հավելվածների կոնֆիգուրացիայի ֆայլերը բոլորն էլ YAML են։ Բնորոշ YAML փաստաթուղթը նկատելիորեն ավելի կարճ է, քան համարժեք JSON-ը, և շատ ավելի հեշտ է diff անել pull request-ում։ Այդ էլեգանտության գինը փխրունությունն է, և հենց այստեղ է փոխարկումը հետաքրքիր դառնում։
Հիմնական տարբերությունները, որ նշանակություն ունեն
Երեք տարբերություն է կառավարում գրեթե ամեն փոխարկման որոշում։ Առաջինը, YAML-ում բացատը նշանակալի է, իսկ JSON-ում՝ ոչ։ YAML-ն օգտագործում է բացատներ — երբեք tab-եր — կառուցվածքը ցույց տալու համար, ուստի մեկ սխալ դասավորված բացատը կարող է լուռ փոխել փաստաթղթի իմաստը։ JSON-ը ընդհանրապես ինդենտացիա չի հոգում։ Երկրորդը, YAML-ն աջակցում է մեկնաբանություններ, JSON-ը՝ ոչ։ Ցանկացած # մեկնաբանություն YAML-ում պարզապես անհետանում է, երբ JSON եք ստանում, քանի որ չկա տեղ, որտեղ դա դնել։ Երրորդը, YAML-ն ունի ավելի հարուստ, անուղղակի տիպավորում։ Այն հեշտությամբ կարդում է ամսաթվեր, ժամանակացույցներ և null մի քանի ուղղագրություններով, և կռահում է տիպերը չմեջբերված արժեքներից։ JSON-ն ունի փոքր, հստակ տիպերի հավաքածու և ոչ մի երկիմաստություն։ Նշենք նաև, որ JSON-ը տեխնիկապես YAML 1.2-ի ենթաբազմություն է, հենց դա է պատճառը, թե ինչու վավեր JSON-ը սովորաբար մաքուր վերլուծվում է որպես YAML, բայց հակառակը երաշխավորված չէ։

Փոխարկման նրբությունները, որ պետք է ուշադրության արժանացնել
Փոխադարձ ուղևորությունը միշտ չէ, որ առանց կորստի է, և արժե իմանալ, թե որտեղ է ինչ-որ բան կոտրվում.
- Նորվեգիայի խնդիրը։ YAML 1.1 կանոնների ներքո, չմեջբերված
NO-ն վերլուծվում է որպեսfalseբուլյան արժեք, ևyes,on, ևoffնույնպես դառնում են բուլյան արժեքներ։ Երկրի կոդը կամ անջատիչի պիտակը կարող են վերածվելtrue/false-ի, մինչև նկատեք։ Մեջբերեք արժեքները, որոնք ցանկանում եք տողի տեսքով։ - Թվերի փոխակերպում։ Տարբերակ, ինչպիսին է
3.10-ը, կարող է կորցնել իր վերջին զրոն և դառնալ3.1, և1.0-ը դառնում է թիվ, նույնիսկ երբ ցանկանում էիք տեքստ։ Մեջբերեք տարբերակների տողերն ու ID-ները։ - Ագռավնացույցեր և կեղծանուններ վերանում են։ YAML-ի
&anchorև*aliasհղումները JSON-ում համարժեք չունեն։ Լավ փոխարկիչը դրանք ընդարձակում է իրենց լիարժեք արժեքին, ուստի տվյալները ճիշտ են, բայց կրկնությունների վերացումն անհետացած է — JSON-ից YAML-ից JSON-ը չի վերականգնի բնօրինակ ագռավնացույցերը։ - Մեկնաբանություններ և բլոկային սկալյարներ։ Մեկնաբանությունները նետվում են JSON-ի անցնելիս։ Բազմատող բլոկային սկալյարները (
|և>) կուտակվում են սովորական JSON տողերի մեջ\nփախման նշաններով, ուստի տեսողական ձևակերպման մտադրությունը կորած է։ - Ինդենտացիա, YAML-ին վերադառնալիս։ JSON-ը ինդենտացիա չի կոդավորում, ուստի փոխարկիչն ընտրում է հետևողական ոճ։ Վերանայեք այն, մինչև tab-ազգայուն գործիքի մեջ տեղադրելը։
Ինչու է կարևոր, որ միայն տեղական լինի
Կոնֆիգուրացիայի ֆայլերն ու API ծանրաբեռնվածությունները հենց այն տեսակի բան են, որ չպետք է վերբեռնվեն պատահական սերվեր. հաճախ դրանք կրում են host անուններ, token-ներ, ներքին ծառայությունների անուններ, կամ հաճախորդի տվյալներ։ Այս փոխարկիչը վերլուծության և ստեղծման քայլը կատարում է ձեր բրաուզերում՝ JavaScript-ով։ Ոչինչ չի ուղարկվում backend, ոչինչ չի գրանցվում, և գործիքն աշխատում է offline, երբ էջը բեռնվել է։ Տեղադրեք Kubernetes գաղտնիք կամ CI աշխատանքային հոսք՝ վստահ լինելով, որ մնում է ձեր մեքենայում։
Ձեզ հարկավո՞ր է հարակից գործիքներ։ Դիտեք մեր տվյալների փոխարկիչների ամբողջ հավաքածուն, մաքրեք խառնաշփոթ մուտքագրումը JSON ձևակերպիչով, և վերադարձեք այստեղ, երբ պետք է շարժվել API աշխարհի և կոնֆիգուրացիայի աշխարհի միջև։
Հաճախ տրվող հարցեր
Իմ տվյալները վերբեռնվու՞մ են ինչ-որ տեղ։
Ոչ։ Փոխարկումն ամբողջությամբ կատարվում է ձեր բրաուզերում՝ տեղական JavaScript-ի միջոցով։ Ձեր JSON-ը կամ YAML-ը երբեք չեն ուղարկվում սերվեր, ուստի գաղտնիքներն ու կոնֆիգուրացիայի ֆայլերը մնում են գաղտնի։
Ինչու՞ իմ YAML-ի true կամ false արժեքն անսպասելիորեն փոխվեց։
YAML 1.1-ը չմեջբերված բառերը, ինչպիսիք են yes, no, on, և off, վերաբերվում է որպես բուլյան արժեքներ — Նորվեգիայի խնդիրը։ Փաթեթավորեք ցանկացած արժեք, որ ցանկանում եք տողի տեսքով, չակերտների մեջ, որպեսզի այն վերապրի փոխարկումն որպես տեքստ։
Ի՞նչ է պատահում իմ մեկնաբանություններին, երբ YAML-ը JSON եմ փոխարկում։
JSON-ը մեկնաբանության շարահյուսություն չունի, ուստի բոլոր hash մեկնաբանությունները հեռացվում են փոխարկման ընթացքում։ Եթե ձեզ հարկավոր է պահպանել նշումները, պահեք ձեր հեղինակավոր պատճենը YAML-ում։
YAML-ի ագռավնացույցերն ու կեղծանունները պահպանվու՞մ են։
Դրանք ընդարձակվում են իրենց լիարժեք արժեքին, քանի որ JSON-ը հղումային մեխանիզմ չունի։ Տվյալները ճիշտ են մնում, բայց կրկնությունների վերացումը հնարավոր չէ վերականգնել, երբ հետ YAML եք փոխարկում։
Կարո՞ղ եմ JSON-ը YAML-ի, ինչպես նաև YAML-ը JSON-ի փոխարկել։
Այո, գործիքն աշխատում է երկու ուղղություններով։ Տեղադրեք JSON՝ YAML ստանալու համար, կամ տեղադրեք YAML՝ JSON ստանալու համար, և փոխարկիչը հայտնաբերում և ստեղծում է մյուս ֆորմատը։
Ինչու՞ է YAML-ը կոտրվում, երբ tab-եր եմ օգտագործում։
YAML-ը պահանջում է բացատներ ինդենտացիայի համար և մերժում է tab-երը։ Եթե տեղադրումը ձախողվում է, փոխարինեք tab նիշերը բացատներով և պահեք հետևողական ինդենտացիա։
