← ყველა ხელსაწყო

JSON-დან YAML კონვერტერი

გადაიყვანეთ JSON YAML-ში და YAML JSON-ში მყისიერად ბრაუზერში. მხოლოდ ლოკალურად და პრივატულად, კომენტარების, ტიპების, ინდენტაციისა და anchor-ების შენიშვნებით.

გადაიყვანეთ JSON YAML-ად და YAML JSON-ად თქვენს ბრაუზერში

JSON და YAML ერთი და იმავე ტიპის მონაცემებს აღწერს — ჩალაგებულ რუკებს, სიებს, სტრიქონებს, რიცხვებსა და ლოგიკურ მნიშვნელობებს — მაგრამ ისინი სავსებით განსხვავებულად გამოიყურებიან და სხვადასხვა ადგილას გამოიყენება. თუ დროის ნაწილს API-ებთან, კონტეინერების ფაილებთან ან CI ხაზოსანთან ატარებთ, საბოლოოდ ერთი მეორეში გადაყვანა დაგჭირდებათ. ეს გვერდი ამ კონვერტაციას ორივე მიმართულებით აკეთებს, მთლიანად თქვენს ბრაუზერში, ასე რომ თქვენ მიერ ჩასმული მონაცემი არასდროს ტოვებს თქვენს მანქანას.

აბსტრაქტული შუქის ბრჭყალები გარდაიქმნება სუფთა, აბზაცებზე დაფუძნებულ კონფიგურაციის შრეებად მუქი ინდიგოსფერი ფონის ფონზე
JSON-ის სტრუქტურა იშლება აბზაცებზე დაფუძნებულ YAML-ად.

რა არის JSON და სად გამოიყენება

JSON (JavaScript Object Notation) მკაცრი, ბრჭყალებზე დაფუძნებული ფორმატია, რომელიც პირველ რიგში მანქანებისთვისაა შექმნილი. ყოველი ობიექტი {}-შია გახვეული, ყოველი მასივი []-ში, გასაღებები და სტრიქონული მნიშვნელობები ორმაგ ბრჭყალებშია, ელემენტები კი მძიმეებით არის გამოყოფილი. ეს არის ნაგულისხმევი გადაცემის ფორმატი REST და GraphQL API-ებისთვის, ვებჰუკების უმეტესობის ტანი, 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-ზე და ბევრად უფრო ადვილია pull request-ში შედარება (diff). ამ ელეგანტურობის ფასი მყიფეობაა, სწორედ აქ ხდება კონვერტაცია საინტერესო.

ძირითადი განსხვავებები, რომლებსაც მნიშვნელობა აქვს

თითქმის ყოველ კონვერტაციის გადაწყვეტილებას სამი განსხვავება განაპირობებს. პირველი, ინტერვალები (whitespace) YAML-ში მნიშვნელოვანია და JSON-ში - არა. YAML სტრუქტურის აღსანიშნად სივრცეებს იყენებს — არასდროს ტაბულაციას — ასე რომ ერთი არასწორად გასწორებული სივრცე ჩუმად შეიძლება შეცვალოს დოკუმენტის მნიშვნელობა. 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 რიცხვად იქცევა თუნდაც ტექსტი გინდოდათ. ჩასვით ბრჭყალებში ვერსიის სტრიქონები და იდენტიფიკატორები.
  • ღუზები და ალიასები ქრება. YAML-ის &anchor და *alias მიმართვებს JSON-ში ანალოგი არა აქვს. კარგი კონვერტერი მათ სრულ მნიშვნელობებამდე შლის, ასე რომ მონაცემი სწორია, მაგრამ დუბლირების თავიდან აცილება დაკარგულია — JSON-დან YAML-ში და უკან JSON-ში კონვერტაცია ორიგინალურ ღუზებს არ აღადგენს.
  • კომენტარები და ბლოკური სკალარები. კომენტარები JSON-ში გადასვლისას იკარგება. მრავალხაზიანი ბლოკური სკალარები (| და >) იკეცება ჩვეულებრივ JSON სტრიქონებად \n ესქეიფებით, ასე რომ ვიზუალური ფორმატირების განზრახვა იკარგება.
  • აბზაცი YAML-ში დაბრუნებისას. JSON აბზაცს არ კოდირებს, ამიტომ კონვერტერი თანმიმდევრულ სტილს ირჩევს. გადახედეთ მას ტაბულაცია-მგრძნობიარე ხელსაწყოში ჩასმამდე.

რატომ აქვს მნიშვნელობა მხოლოდ ლოკალურ დამუშავებას

კონფიგურაციის ფაილები და API-ის შიგთავსები ზუსტად ის ტიპის მონაცემია, რომელიც არ უნდა აიტვირთოს შემთხვევით სერვერზე: ისინი ხშირად ატარებენ ჰოსტის სახელებს, ტოკენებს, შიდა სერვისების სახელებს ან მომხმარებლის მონაცემებს. ეს კონვერტერი პარსინგისა და გამომუშავების საფეხურს თქვენს ბრაუზერში JavaScript-ით ატარებს. არაფერი იგზავნება ბექენდზე, არაფერი ილოგება, და ხელსაწყო ინტერნეტის გარეშეც მუშაობს გვერდის ჩატვირთვის შემდეგ. ჩასვით Kubernetes secret ან CI სამუშაო პროცესი დარწმუნებული, რომ ის თქვენს მანქანაზე რჩება.

გჭირდებათ მონათესავე ხელსაწყოები? დაათვალიერეთ ჩვენი სრული ნაკრები მონაცემთა კონვერტერები, დაასუფთავეთ არეული შეყვანა JSON ფორმატერით, და დაბრუნდით აქ, როცა API-ის სამყაროსა და კონფიგურაციის სამყაროს შორის გადასვლა დაგჭირდებათ.

ხშირად დასმული კითხვები

ჩემი მონაცემი იტვირთება სადმე?

არა. კონვერტაცია მთლიანად თქვენს ბრაუზერში ხდება ლოკალური JavaScript-ის გამოყენებით. თქვენი JSON ან YAML არასდროს იგზავნება სერვერზე, ასე რომ საიდუმლოები და კონფიგურაციის ფაილები კონფიდენციალურად რჩება.

რატომ შეიცვალა ჩემი YAML მნიშვნელობა true ან false მოულოდნელად?

YAML 1.1 უბრჭყალო სიტყვებს, როგორიცაა yes, no, on და off, ლოგიკურ მნიშვნელობებად აღიქვამს — ეს არის ნორვეგიის პრობლემა. ჩასვით ბრჭყალებში ნებისმიერი მნიშვნელობა, რომელიც სტრიქონად გინდათ, რომ ის ტექსტად გადარჩეს კონვერტაციისას.

რა ემართება ჩემს კომენტარებს YAML-ის JSON-ად კონვერტაციისას?

JSON-ს კომენტარის სინტაქსი არა აქვს, ამიტომ ყველა # კომენტარი კონვერტაციისას იშლება. თუ ჩანაწერების შენარჩუნება გჭირდებათ, თქვენი მთავარი ასლი YAML-ში შეინახეთ.

ინახება YAML-ის ღუზები და ალიასები?

ისინი სრულ მნიშვნელობებამდე იშლება, რადგან JSON-ს მიმართვის მექანიზმი არ აქვს. მონაცემი სწორი რჩება, მაგრამ დუბლირების თავიდან აცილება უკან YAML-ში დაბრუნებისას აღდგენადი აღარაა.

შემიძლია JSON YAML-ად, ისევე როგორც YAML JSON-ად გადავიყვანო?

დიახ, ხელსაწყო ორივე მიმართულებით მუშაობს. ჩასვით JSON, რომ YAML მიიღოთ, ან ჩასვით YAML, რომ JSON მიიღოთ, კონვერტერი კი ცნობს და გამოიმუშავებს მეორე ფორმატს.

რატომ იშლება YAML, როცა ტაბულაციას ვიყენებ?

YAML-ს აბზაცისთვის სივრცეები სჭირდება და ტაბულაციას უარყოფს. თუ ჩასმა პარსინგს ვერ ივლის, ჩაანაცვლეთ ტაბულაციის სიმბოლოები სივრცეებით და აბზაცი თანმიმდევრული შეინარჩუნეთ.