كيفية تحويل YAML إلى JSON [باستخدام Python وPowerShell وGo]

العديد من الأدوات الحديثة، خاصة في إدارة التكوين وفضاء البنية التحتية كرمز (IaC)، تستخدم ملفات JSON أو YAML لتخزين بيانات التكوين. إذا كنت بحاجة لتحويل البيانات من تنسيق YAML إلى تنسيق JSON، فإن هذا المقال مخصص لك.

في هذا المقال، ستتعلم عدة طرق لتحويل بيانات YAML إلى تنسيق JSON، بما في ذلك البرمجة بلغة Python و PowerShell و Go.

المتطلبات

إذا كنت ترغب في متابعة الأمثلة في هذا البرنامج التعليمي، تأكد من أن لديك

  • A code editor. This article will use Visual Studio Code version 1.55.1. Feel free to use any code editor you want.
  • للبدء في تحويل YAML إلى JSON، تحتاج إلى نموذج YAML. انسخ المحتوى أدناه إلى ملف جديد يسمى operating-systems.yml. احفظ ملف YAML في دليل العمل الخاص بك.
operating-systems.yml
Windows 10: 100
Windows Server 2019: 50
Windows Server 2022: 1
MacOS: 3
CentOS: 75
Photon: 12

استخدام Python لتحويل YAML إلى JSON

البرمجة بلغة Python هي لغة ممتازة للاستخدام في التلقائية. ولكن هل تعلم أنه يمكنك توسيع قدرات Python واستخدامها لتحويل المستندات من YAML إلى JSON؟ وتحتاج فقط إلى أداء بضع خطوات لبدء تحويل YAML إلى JSON في أي وقت.

المثال في هذا القسم يتطلب منك أن تكون قد قمت بتثبيت Python 3.9 و PIP (أحدث إصدار حتى كتابة هذا النص هو 21.0.1).

إضافة دعم YAML إلى Python

Python ليس لديه دعمًا مدمجًا لـ YAML. وهذا يعني أن Python لا يستطيع قراءة أو تفسير مستندات YAML بشكل افتراضي. لإضافة دعم YAML إلى Python، عليك أولاً تثبيت وحدة PyYAML.

لتثبيت وحدة PyYAML، ستحتاج إلى تشغيل الأمر pip، وهو أداة تثبيت الحزم لـ Python. للقيام بذلك، اتبع هذه الخطوات.

أولاً، افتح محرر الأوامر المفضل لديك، مثل سطر الأوامر أو PowerShell. يجب أن يعمل الأمر pip في أي منهما. يستخدم هذا المثال PowerShell.

بعد ذلك، قم بتشغيل الأمر أدناه في PowerShell. هذا الأمر يقوم بتثبيت وحدة PyYAML.

pip install pyyaml

كما يمكنك أن ترى في لقطة الشاشة أدناه، قام pip بتثبيت أحدث إصدار من PyYAML (5.4.1 حتى كتابة هذا النص).

Installing the PyYAML module

كتابة نص التحويل

الآن بعد أن قمت بتثبيت الوحدة المطلوبة (PyYAML)، أنت جاهز لكتابة نص التحويل الخاص بك. لإنشاء سكريبت Python لتحويل YAML إلى JSON، اتبع هذه الخطوات.

1. افتح محرر الكود الخاص بك وأنشئ ملفًا جديدًا يُسمى convert-os.py في دليل العمل الخاص بك. هذا الملف هو سكريبتك.

2. قم بنسخ الكود أدناه والصقه في ملف الـconvert-os.py الخاص بك. سيقوم هذا السكربت بقراءة محتوى YAML من operating-systems.yml، ثم تحويل المحتوى إلى تنسيق JSON، وسيكتب الناتج في ملف python_operating-systems.json.

## convert-os.py
## استيراد الوحدات للتعامل مع JSON & YAML
import yaml
import json

## إنشاء متغير لاحتواء البيانات المستوردة
os_list = {}

## قراءة ملف YAML
with open("c:\temp\operating-systems.yml") as infile:
     # تحويل YAML إلى المتغير المحدد أعلاه os_list = yaml.load(infile, Loader=yaml.FullLoader)     # طباعة القائمة إلى وحدة التحكم print(os_list)
 Open a file to write the JSON output. The 'w' makes the file writable
 with open("c:\temp\python_operating-systems.json", 'w') as outfile:
     # تحويل JSON، وتعيين "indent" لجعل الملف أكثر قابلية للقراءة json.dump(os_list, outfile, indent=4) print("JSON file written.")

3. حفظ السكربت convert-os.py.

تشغيل السكربت التحويلي

بعد إنشاء السكربت التحويلي، حان الوقت لوضعه على الاختبار. لتنفيذ سكربت Python لتحويل YAML إلى JSON، قم باتباع الخطوات التالية:

1. قم بفتح نافذة الطرفية. يستخدم هذا المقال PowerShell، ولكن سيعمل موجه الأوامر (CMD) بنفس الكفاءة.

٢. انسخ الأمر أدناه، والصقه في PowerShell، ثم اضغط على Enter. هذا الأمر يقوم بتشغيل البرنامج التنفيذي Python لاستدعاء النصيب convert-os.py الذي قمت بإنشائه في القسم السابق.

python c:\temp\convert-os.py

بعد تشغيل الأمر، يجب أن ترى إخراجًا مماثلًا للصورة أدناه. كما ترى، عرض الأمر الناتج على الشاشة وحفظ نفس الإخراج في ملف c:\temp\python_operating-systems.json.

Running the YAML to JSON conversion script using Python

٣. في النهاية، افتح ملف JSON المسمى python_operating-systems.json الذي يجب أن يكون قد أنشأه النصيب convert-os.py. في هذا المثال، لفتح الملف في المفكرة، قم بتشغيل الأمر التالي في PowerShell.

notepad C:\temp\python_operating-systems.json
Viewing the python_operating-systems.json file in notepad

استخدام PowerShell لتحويل YAML إلى JSON

يمكن لـ PowerShell تعديل ملفات النص وتحويل الكائنات إلى عدة تنسيقات بما في ذلك JSON. نظرًا لأن PowerShell قابل للتوسيع، يمكنك استخدام PowerShell لتحويل تنسيق YAML إلى JSON باستخدام الوحدة النمطية الصحيحة.

إضافة دعم YAML إلى PowerShell

تحتوي PowerShell على دعم مدمج للتعامل مع محتوى JSON، ولكن ليس لديها دعم لـ YAML. لحسن الحظ، هناك وحدة نمطية توسيعية لـ PowerShell لدعم ملفات YAML. تُسمى هذه الوحدة PowerShell-yaml، وأحدث إصدار حتى كتابة هذا النص هو 0.4.2. اتبع هذه الخطوات لتثبيت الوحدة النمطية.

١. على جهاز الكمبيوتر الخاص بك، افتح جلسة PowerShell.

٢. انسخ الأمر أدناه، والصقه في PowerShell، ثم اضغط على Enter. يستخدم هذا الأمر الأداة Install-Module لتثبيت وحدة PowerShell-yaml.

Install-Module PowerShell-yaml

٣. بعد تثبيت الوحدة، ستصبح هناك اثنتان من الأوامر الجديدة المتاحة في PowerShell كجزء من وحدة PowerShell-yaml. تلك الأوامر الجديدة هي:

ConvertFrom-Yaml – الأمر لتحويل بيانات YAML إلى جدول تجزئة.

ConvertTo-Yaml – الأمر لتحويل كائنات جدول التجزئة إلى بيانات YAML.

للتحقق من توافر الأوامر في PowerShell، قم بتشغيل الأمر أدناه في PowerShell.

Get-Command -Module PowerShell-yaml

كما هو موضح أدناه، قامت الأداة Get-Command بسرد الأوامر من وحدة PowerShell-yaml.

Getting the PowerShell-yaml cmdlets

كتابة نص الشطب

لإنشاء نص الشطب الخاص بتحويل YAML إلى JSON في PowerShell، اتبع هذه التعليمات.

١. افتح محرر النصوص الخاص بك وأنشئ ملفًا جديدًا يحمل اسم convert-os.ps1 في دليل العمل الخاص بك.

2. انسخ الكود أدناه والصقه في ملف convert-os.ps1. الكود أدناه يقوم بقراءة ملف operating-systems.yml وتحويله إلى صيغة JSON. بمجرد تحويله إلى JSON، يتم حفظه في ملف PowerShell_operating-systems.json.

#convert-os.ps1
 #قراءة الملف YAML باستخدام Get-Content وتحويل البيانات إلى جدول تجهيز باستخدام ConvertFrom-Yaml. المتغير $os_list يخزن كائن الجدول تجهيز.
 $os_list = (Get-Content -Path "C:\temp\operating-systems.yml" | ConvertFrom-Yaml)
 #تحويل كائن الجدول تجهيز في المتغير $os_list إلى صيغة JSON باستخدام ConvertTo-Json. بمجرد التحويل إلى JSON، قم بحفظه في ملف C:\temp\PowerShell_operating-systems.json باستخدام Set-Content.
 Set-Content -Path "C:\temp\PowerShell_operating-systems.json" -Value ($os_list | ConvertTo-Json)

3. حفظ ملف convert-os.ps1.

تشغيل نص الحويل

الآن بعد أن قمت بإنشاء نص الحويل الخاص بك، الخطوة التالية هي تشغيله لتحويل YAML إلى JSON. لتنفيذ نص الحويل في PowerShell، اتبع هذه الخطوات.

  1. افتح نافذة PowerShell إذا لم تكن قد قمت بذلك بعد.

2. انسخ الأمر أدناه، ثم الصقه في PowerShell، واضغط على Enter. هذا الأمر يستدعي نص البرنامج convert-os.ps1 الذي قمت بإنشائه في الجزء السابق.

c:\temp\convert-os.ps1

3. بعد تشغيل البرنامج، افتح ملف الإخراج JSON الذي أنشأه نص البرنامج convert-os.ps1 في الخطوة السابقة. لفعل ذلك، قم بتشغيل الأمر التالي في PowerShell لفتح الملف PowerShell_operating-systems.json في Notepad.

C:\temp\PowerShell_operating-systems.json
PowerShell_operating-systems.json

notepad C:\temp\PowerShell_operating-systems.json
Viewing the content of the PowerShell_operating-systems.json file

استخدام Go لتحويل YAML إلى JSON

كل من Python و PowerShell لغات عالية المستوى. كونهما عاليتي المستوى يجعل كتابة النصوص البرمجية أسهل لكنه يقلل قليلاً من التحكم. من ناحية أخرى، Go لغة منخفضة المستوى، مما يجعل استيراد بيانات YAML أكثر تعقيدًا.

المثال في هذا القسم سيستخدم Go. أحدث إصدار حتى كتابة هذا النص هو go1.16.3. إذا لم يكن لديك Go بعد، يرجى الرجوع إلى صفحة التنزيل والتثبيت لتثبيته على جهاز الكمبيوتر الخاص بك.

Go
download and install

إضافة دعم YAML إلى Go

مثل PowerShell و Python، يعد دعم JSON جزءًا من مكتبات Go الأساسية، ولكن YAML ليس كذلك. لإضافة دعم YAML في Go، تحتاج إلى تثبيت حزمة YAML.v3 أولاً باستخدام الأمر go get. لتثبيت حزمة YAML.v3:

YAML.v3

أولاً، على جهاز الكمبيوتر الخاص بك، افتح موجه الأوامر التي تريدها، مثل نافذة الأوامر أو PowerShell. يستخدم هذا المثال PowerShell.

التالي، انسخ الأمر أدناه وقم بتشغيله في PowerShell. سيقوم هذا الأمر بتنزيل وتثبيت الحزمة بالاسم gopkg.in/yaml.v3.

go get gopkg.in/yaml.v3
Installing the yaml.v3 package in Go

كتابة نص التحويل

لإنشاء نص تحويل YAML إلى JSON باستخدام لغة Go، اتبع هذه التعليمات.

1. افتح محرر الكود الخاص بك وأنشئ ملفًا جديدًا بالاسم convert-os.go في دليل العمل الخاص بك.

2. انسخ الكود أدناه والصقه في الملف الفارغ convert-os.go. يقوم الكود بتوريد الحزم اللازمة، يعرف بعض هياكل الذاكرة، يقوم بتوريد ملف YAML، ويحوله إلى JSON قبل كتابته في ملف JSON بالاسم c:\temp\go_operating-systems.json.

// يخبر هذا الأمر جو أي وظيفة يجب تحميلها.
 package main
 // استيراد الحزم:
 import (
  // وحدة JSON
     "encoding/json"
  // لكتابة الإخراج على الشاشة
     "fmt"
  // لقراءة وكتابة الملفات
     "io/ioutil"
 // وحدة YAML
     "gopkg.in/yaml.v3"
 )
 // تعريف "هياكل"، وهذه هي هياكل البيانات في الذاكرة، وتتوافق
 // مع شكل ملفات YAML و JSON.
 type operatingSystems struct {
     Windows10         int yaml:"Windows 10"
     WindowsServer2019 int yaml:"Windows Server 2019"
     WindowsServer2022 int yaml:"Windows Server 2022"
     MacOS             int yaml:"MacOS"
     CentOS            int yaml:"CentOS"
     Photon            int yaml:"Photon"
 }
 type operatingSystemsjson struct {
     Windows10         int json:"Windows 10"
     WindowsServer2019 int json:"Windows Server 2019"
     WindowsServer2022 int json:"Windows Server 2022"
     MacOS             int json:"MacOS"
     CentOS            int json:"CentOS"
     Photon            int json:"Photon"
 }
 func main() {
   // يخبر المستخدم ببدء العملية
     fmt.Println("Parsing YAML file")
 // تعريف مسار الملف الإدخالي
 var fileName string = "c:\temp\operating-systems.yml"
 // تحميل YAML من الملف. يتطلب جو التعامل مع الأخطاء في هذه الخطوة.
 yamlFile, err := ioutil.ReadFile(fileName)
     if err != nil {
         fmt.Printf("Error reading YAML file: %s\n", err)
         return
     }
 // استخراج YAML إلى هيكلك
     var oses operatingSystems
     yaml.Unmarshal(yamlFile, &oses)
 // إنشاء هيكل JSON، باستخدام البيانات من هيكل YAML
 var osesjson = operatingSystemsjson{
         Windows10:         oses.Windows10,
         WindowsServer2019: oses.WindowsServer2019,
         WindowsServer2022: oses.WindowsServer2022,
         MacOS:             oses.MacOS,
         CentOS:            oses.CentOS,
         Photon:            oses.Photon,
     }
 // إنشاء سلسلة للإخراج بتنسيق JSON.
 jsonOutput, err := json.Marshal(osesjson)
 // طباعة النتيجة على الشاشة. لاحظ أن %+v يعني أن
   // اسم المتغير يُطبع مع البيانات. هذا هو السبب
   // في عدم وجود مسافات في أسماء المفاتيح في الإخراج.
     fmt.Printf("Result: %+v\n", osesjson)
 // كتابة ملف JSON
 err = ioutil.WriteFile("c:\temp\Go_operating-systems.json", jsonOutput, 0644)
 }

3. حفظ ملف convert-os.go.

تشغيل نص التحويل

تشغيل النصوص في جو يستخدم الأمر go run تليه اسم الملف النصي. لتشغيل نص التحويل من YAML إلى JSON في جو، اتبع الخطوات التالية.

1. على جهاز الكمبيوتر الخاص بك، افتح موجه الأوامر التي تريد استخدامها. في نظام التشغيل Windows، سيعمل go على إما سطر الأوامر أو بوويرشيل. يستخدم هذا المثال بوويرشيل لتشغيل go.

2. بمجرد دخولك إلى بوويرشيل، قم بنسخ الأمر أدناه وقم بتشغيله في بوويرشيل. سيقوم هذا الأمر بدعوة الأمر go run لتشغيل نص c:\temp\convert-os.go.

go run c:\temp\convert-os.go
Running Convert-os Go script.

3. بعد تشغيل النص، افتح ملف الإخراج C:\temp\Go_operating-systems.json الذي أنشأه نص convert-os.go في الخطوة السابقة. يفتح هذا المثال Go_operating-systems.json في المفكرة.

Viewing the Go_operating-systems.json in notepad

الاستنتاج

في هذه المقالة، تعلمت كيفية تحويل بيانات YAML وملفاتها إلى JSON باستخدام النصوص في Python، بوويرشيل، وجو. الآن بعد أن تعلمت الطرق المختلفة لتحويل YAML إلى JSON، ما الطريقة التي تعتقد أنك ستستخدمها أكثر؟

Source:
https://adamtheautomator.com/yaml-to-json/