JSON ን ወደ YAML እና YAML ን ወደ JSON በአሳሽዎ ውስጥ ይቀይሩ
JSON እና YAML ተመሳሳይ ዓይነት ውሂብ ይገልጻሉ — ውስጠ-ገብ maps፣ lists፣ strings፣ ቁጥሮች እና booleans — ነገር ግን በጣም የተለያዩ ይመስላሉ በተለያዩ ቦታዎችም ይጠቀማሉ። ከAPIs፣ container ፋይሎች ወይም CI pipelines አጠገብ ጊዜ ካሳለፉ በመጨረሻ አንዱን ወደ ሌላ መቀየር ያስፈልግዎታል። ይህ ገጽ ያንን መቀየር ሁለቱንም አቅጣጫ ያደርጋል፣ ሙሉ በሙሉ በአሳሽዎ ውስጥ፣ ስለዚህ የሚለጥፉት ውሂብ ከመሳሪያዎ በጭራሽ አይወጣም።

JSON ምንድን ነው እና የት ይኖራል
JSON (JavaScript Object Notation) ጥብቅ፣ ለማሽኖች መጀመሪያ የተገነባ bracket-and-brace ፎርማት ነው። እያንዳንዱ object በ{} ውስጥ ተጠቅልሏል፣ እያንዳንዱ array በ[] ውስጥ፣ keys እና string ዋጋዎች በድርብ ጥቅስ ተይዘዋል፣ ንጥሎችም በኮማ ተለያይተዋል። ለREST እና GraphQL APIs ነባሪ wire format ነው፣ የአብዛኞቹ webhooks ብዙ ጊዜ ራስ ነው፣ የNoSQL documents ቅርጽ ነው፣ fetch call ዎ የሚመልሰውም ነው። በሁሉም ማለት ይቻላል ቋንቋ ያለምንም ተጨማሪ ስራ ይተነተናል፣ ይህ ደግሞ ትክክለኛ ለምን በAPI ንብርብር ላይ ያሸነፈበት ምክንያት ነው፡ በJavaScript JSON.parse፣ በPython standard library ውስጥ json፣ በየትም ቦታ ተመሳሳይ ነገሮች። ልውውጡ JSON በእጅ ለመጻፍ ጥቅል መሆኑ እና አስተያየቶችን መከልከሉ ነው፣ ስለዚህ ሰው ቀኑን ሙሉ ለሚያርትዕባቸው ፋይሎች ደካማ ፎርማት ነው።
YAML ምንድን ነው እና የት ይኖራል
YAML (YAML Ain't Markup Language) ለተቃራኒ ቅድሚያ ተብሎ ተነድፏል፡ ሰው መጀመሪያ። ቅንፎችንና ጥቅሶችን ይጥላል፣ ውስጠ-ገብነትን ለመግለጽ indentation ይጠቀማል፣ በ# አስተያየቶችን እንዲጽፉም ይፈቅዳል። ያ ንባብ ተመችነት ለconfiguration ቋንቋ ምክንያት የሆነው ነው። Docker Compose ፋይሎች፣ Kubernetes manifests፣ GitHub Actions እና GitLab CI workflows፣ Ansible playbooks፣ ስፍር ቁጥር የሌላቸው መተግበሪያ config ፋይሎች ሁሉም YAML ናቸው። መደበኛ YAML ሰነድ ከተመጣጣኝ JSON በሚያስገርም ሁኔታ አጭር ነው በpull request ውስጥ ለማወዳደርም በጣም ቀላል ነው። የዚያ ውበት ዋጋ ደካማነት (fragility) ነው፣ ይህም መቀየር ትኩረት የሚስብበት ቦታ ነው።
የሚያሳስቡ ቁልፍ ልዩነቶች
ሶስት ልዩነቶች ማለት ይቻላል እያንዳንዱን የመቀየር ውሳኔ ይመራሉ። አንደኛ፣ ባዶ ቦታ (whitespace) በYAML ውስጥ ወሳኝ ነው በJSON ውስጥ ግን ምንም ትርጉም የለውም። YAML አወቃቀርን ለማመልከት ክፍተቶችን — በጭራሽ tabs ን አይደለም — ይጠቀማል፣ ስለዚህ አንድ ያልተስተካከለ ክፍተት በጸጥታ የሰነድ ትርጉምን ሊቀይር ይችላል። JSON ስለ indentation ፈጽሞ አይጨነቅም። ሁለተኛ፣ YAML አስተያየቶችን ይደግፋል JSON ግን አይደለም። ማንኛውም # አስተያየት በYAML ውስጥ JSON ሲያመርቱ በቀላሉ ይጠፋል፣ ምክንያቱም የሚቀመጥበት ቦታ ስለሌለ። ሶስተኛ፣ YAML የበለጠ ውስጣዊ typing አለው። ቀኖችን፣ timestamps ን፣ null ን በተለያዩ አጻጻፎች ደስተኛ ሆኖ ያነባል፣ ካልተጠቀሱ ዋጋዎችም ዓይነቶችን ይገምታል። JSON ትንሽ፣ ግልጽ የዓይነት ስብስብ አለው ምንም አሻሚነትም የለም። JSON በቴክኒካል የYAML 1.2 ንዑስ ስብስብ መሆኑንም ልብ ይበሉ፣ ይህም ትክክለኛ JSON ብዙ ጊዜ ንፁህ በሆነ መልኩ እንደ YAML የሚተነተነው ለምን እንደሆነ ያሳያል፣ ተቃራኒው ግን ዋስትና የለውም።

ማየት ተገቢ የሆኑ የመቀየር ወጥመዶች
ዙር ጉዞ (round-tripping) ሁልጊዜ lossless አይደለም፣ ነገሮች የት እንደሚሰበሩ ማወቅም ይጠቅማል፦
- የኖርዌይ ችግር። በYAML 1.1 ደንቦች ስር ያልተጠቀሰ
NOእንደ booleanfalseይተነተናል፣yes፣on፣offም booleans ይሆናሉ። የአገር ኮድ ወይም switch ስያሜ ካላስተዋሉ ወደtrue/falseሊገለበጥ ይችላል። እንደ strings ማለት የፈለጓቸውን ዋጋዎች ይጥቀሱ። - የቁጥር coercion። እንደ
3.10ያለ ስሪት ተከታዩን ዜሮ ሊያጣ ወደ3.1ሊሆን ይችላል፣1.0ደግሞ ጽሑፍ ቢፈልጉም ቁጥር ይሆናል። Version strings እና IDs ን ይጥቀሱ። - Anchors እና aliases ይጠፋሉ። የYAML
&anchorእና*aliasማጣቀሻዎች ምንም የJSON ተመጣጣኝ የላቸውም። ጥሩ መቀየሪያ ወደ ሙሉ ዋጋቸው ያሰፋቸዋል፣ ስለዚህ ውሂቡ ትክክለኛ ነው ግን deduplication ግን ጠፍቷል — JSON ወደ YAML ወደ JSON መልሶ ኦሪጅናል anchors ን አይገነባም። - Comments እና block scalars። ወደ JSON ሲሄድ አስተያየቶች ይጣላሉ። ብዙ-መስመር block scalars (
|እና>) ወደ ተራ JSON strings ከ\nescapes ጋር ይፈርሳሉ፣ ስለዚህ የእይታ ፎርማት ዓላማ ይጠፋል። - ወደ YAML ሲመለሱ Indentation። JSON indentation አይያዝም፣ ስለዚህ መቀየሪያው ወጥ ዘይቤ ይመርጣል። ወደ tab-sensitive መሳሪያ ከመለጠፍዎ በፊት ይገምግሙት።
በአካባቢ ብቻ መሆኑ ለምን ያሳስባል
Config ፋይሎችና API payloads ወደ ዘፈቀደ ሰርቨር መጫን የሌለባቸው ትክክለኛ ነገሮች ናቸው፡ ብዙ ጊዜ hostnames፣ tokens፣ ውስጣዊ የአገልግሎት ስሞች ወይም የደንበኛ ውሂብ ይይዛሉ። ይህ መቀየሪያ parse-and-emit ደረጃውን በJavaScript በአሳሽዎ ውስጥ ያካሂዳል። ምንም ነገር ወደ backend አይላክም፣ ምንም ነገር አይመዘገብም፣ መሳሪያውም ገጹ ከተጫነ በኋላ ከመስመር ውጭ ይሰራል። የKubernetes secret ወይም የCI workflow በመተማመን በመሳሪያዎ ላይ እንደሚቆይ ተማምነው ይለጥፉ።
ተያያዥ መሳሪያ ያስፈልግዎታል? ሙሉውን የየውሂብ መቀየሪያዎች ስብስብ ያስሱ፣ የተዘበራረቀ ግቤትን በJSON formatter ያንፁ፣ በAPI ዓለምና በconfig ዓለም መካከል መሸጋገር በፈለጉ ጊዜ ወደዚህ ይመለሱ።
በተደጋጋሚ የሚጠየቁ ጥያቄዎች
ውሂቤ የትም ይጫናል?
አይ። መቀየሩ የአካባቢ JavaScript ን በመጠቀም ሙሉ በሙሉ በአሳሽዎ ውስጥ ይካሄዳል። JSON ወይም YAML ዎ ወደ ሰርቨር በጭራሽ አይላክም፣ ስለዚህ secrets እና config ፋይሎች የግል ሆነው ይቆያሉ።
የYAML ዋጋዬ true ወይም false ለምን ባልጠበቅሁት ሁኔታ ተቀየረ?
YAML 1.1 ያልተጠቀሱ ቃላትን እንደ yes፣ no፣ on፣ off booleans አድርጎ ይይዛል — የኖርዌይ ችግር። እንደ ጽሑፍ ማለት የፈለጉትን ማንኛውም ዋጋ በጥቅስ ውስጥ ጠቅልለው ስለ መቀየር ተርፎ ይኑር።
YAML ን ወደ JSON ስቀይር አስተያየቶቼ ምን ይሆናሉ?
JSON ምንም የአስተያየት syntax የለውም፣ ስለዚህ ሁሉም hash አስተያየቶች በመቀየር ወቅት ይወገዳሉ። ማስታወሻዎችን ማቆየት ካስፈለገዎት ትክክለኛ ቅጂዎን በYAML ውስጥ ያቆዩ።
የYAML anchors እና aliases ይጠበቃሉ?
JSON ምንም ማጣቀሻ ዘዴ ስለሌለው ወደ ሙሉ ዋጋቸው ይሰፋሉ። ውሂቡ ትክክለኛ ሆኖ ይቆያል፣ ነገር ግን ወደ YAML ሲመልሱ deduplication መልሶ ማግኘት አይቻልም።
JSON ን ወደ YAML እንደዚሁም YAML ን ወደ JSON መቀየር እችላለሁ?
አዎ፣ መሳሪያው በሁለቱም አቅጣጫ ይሰራል። JSON ን ይለጥፉ YAML ያገኛሉ፣ ወይም YAML ን ይለጥፉ JSON ያገኛሉ፣ መቀየሪያውም ሌላውን ፎርማት ይለያል ያመነጫልም።
Tabs ስጠቀም YAML ለምን ይሰበራል?
YAML ለindentation ክፍተቶችን ይፈልጋል tabs ንም ውድቅ ያደርጋል። ልጥፍ ለመተንተን ካልቻለ የtab ፊደላትን በክፍተቶች ይተኩ indentation ንም ወጥ አድርገው ያቆዩ።
