איך להמיר 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

פייתון אינה מספקת תמיכה מובנית ב-YAML. זה אומר שפייתון לא יכולה לקרוא או לפרש מסמכי YAML כברירת מחדל. כדי להוסיף תמיכת YAML לפייתון, עליך תחילה להתקין את מודול PyYAML.

כדי להתקין את מודול PyYAML, יהיה עליך להריץ את הפקודה pip, שהיא מתקינת החבילות של פייתון. עליך לבצע את השלבים הבאים.

ראשית, פתח את מסוף הפקודות או 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, ויכתוב את פלט ה-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 נכתב.")

3. שמור את קובץ ה-convert-os.py.

הרצת סקריפט ההמרה

לאחר יצירת סקריפט ההמרה, זמן לשים אותו למבחן. כדי להריץ את סקריפט ה-Python הממיר מ-YAML ל-JSON, עקוב אחרי השלבים הבאים:

1. פתח חלון טרמינל. מאמר זה משתמש ב-PowerShell, אך סוף הפקודה (CMD) יעבוד גם.

העתק את הפקודה למטה, הדבק אותה בפוורשל, ולחץ על Enter. הפקודה מפעילה את תוכנת ה־Python להפעלת התסריט convert-os.py שיצרת בחלק הקודם.

python c:\temp\convert-os.py

לאחר הרצת הפקודה, תראה פלט דומה לתמונה למטה. כפי שתוכל לראות, הפקודה הציגה את הפלט בפורמט JSON על המסך ושמרה את אותו הפלט בקובץ c:\temp\python_operating-systems.json.

Running the YAML to JSON conversion script using Python

3. לבסוף, פתח את קובץ ה־JSON בשם python_operating-systems.json שהתסריט הפיתוחי של פייתון convert-os.py אמור להפיק. בדוגמה זו, כדי לפתוח את הקובץ ב־notepad, הפעל את הפקודה הבאה בפוורשל.

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

שימוש ב־PowerShell כדי להמיר YAML ל־JSON

PowerShell מסוגלת לשנות קבצי טקסט ולהמיר עצמים למספר פורמטים כולל JSON. מכיוון שפוורשל היא ניתנת להרחבה, ניתן להשתמש בה כדי להמיר YAML לפורמט JSON עם המודול הנכון.

הוספת תמיכה ב־YAML ל־PowerShell

PowerShell תומכת מראש בעיבוד תוכן JSON, אך לא ב־YAML. מאושר, קיימת מודול שמרחיב את יכולות PowerShell לתמיכה בקבצי YAML. המודול נקרא PowerShell-yaml, והגרסה העדכנית ביותר בכתיבת הטקסט הזה היא 0.4.2. עקוב אחר השלבים הללו כדי להתקין את המודול.

1. על מחשבך, פתח סשן של PowerShell.

2. העתק את הפקודה למטה, הדבק אותה בפוורשל ולחץ על Enter. פקודה זו משתמשת ב־cmdlet Install-Module כדי להתקין את המודול PowerShell-yaml.

Install-Module PowerShell-yaml

3. לאחר התקנת המודול, שני cmdlets חדשים יהיו זמינים בפוורשל כחלק מהמודול PowerShell-yaml. הcmdlets החדשים הם:

ConvertFrom-Yaml – הcmdlet להמרת נתוני YAML ל־hash table.

ConvertTo-Yaml – הcmdlet להמרת עצמי hash table לנתוני YAML.

כדי לאשר ששני הcmdlets זמינים בפוורשל, הריץ את הפקודה למטה בפוורשל.

Get-Command -Module PowerShell-yaml

כפי שאתה רואה למטה, ה־cmdlet Get-Command רשומה את הcmdlets מהמודול PowerShell-yaml.

Getting the PowerShell-yaml cmdlets

כתיבת סקריפט ההמרה

כדי ליצור את סקריפט ההמרה מ־YAML ל־JSON ב־PowerShell, עקוב אחר ההוראות הללו.

1. פתח את עורך הקוד שלך וצור קובץ חדש בשם convert-os.ps1 בתיקיית העבודה שלך.

2. העתיקו את הקוד לתוך הקובץ הריק convert-os.ps1. הקטע הקוד הבא קורא את קובץ ה- operating-systems.yml וממיר אותו ל-JSON. לאחר המרה ל-JSON, הוא שומר את ה-JSON בקובץ PowerShell_operating-systems.json.

#convert-os.ps1
 #Read the YAML file using Get-Content and convert the data to a hashtable using ConvertFrom-Yaml. The $os_list variable stores the hashtable object.
 $os_list = (Get-Content -Path "C:\temp\operating-systems.yml" | ConvertFrom-Yaml)
 #Convert the hashtable object in the $os_list variable to JSON format using ConvertTo-Json. Once in JSON, save the save to C:\temp\PowerShell_operating-systems.json file using 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. העתיק את הפקודה למטה, הדבק אותה בפוורשל, ולחץ על Enter. פקודה זו קוראת את התסריט convert-os.ps1 שיצרת בקטע הקודם.

c:\temp\convert-os.ps1

3. לאחר הרצת התסריט, פתח את קובץ הפלט בפורמט JSON C:\temp\PowerShell_operating-systems.json שנוצר על ידי תסריט convert-os.ps1 בשלב הקודם. כדי לעשות זאת, הפעל את הפקודה הבאה בפוורשל כדי לפתוח את הקובץ PowerShell_operating-systems.json באמצעות Notepad.

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

שימוש ב- Go כדי להמיר YAML ל-JSON

פייתון ו-PowerShell הם שני שפות תכנות ברמה גבוהה. להיות ברמה גבוהה הופך את כתיבת התסריטים לקלה יותר אך גם מסיר מעט מהשליטה. מצד שני, Go היא שפת תכנות ברמה נמוכה, המפקירה את יבוא הנתונים מקובץ YAML לפונקציה קשה יותר.

הדוגמה בסעיף זה תשתמש ב־ Go. הגרסה העדכנית ביותר עד כתיבת הטקסט הזה היא go1.16.3. אם אין לך את Go עדיין, עיין ב- דף ההורדה והתקנה כדי להתקין אותו על המחשב שלך.

הוספת תמיכה ב- YAML ל- Go

כמו PowerShell ו-Python, תמיכה ב- JSON היא חלק מספריית הליבה של Go, אך YAML אינה. כדי להוסיף תמיכה ב- YAML ב- Go, עליך להתקין את החבילה YAML.v3 תחילה באמצעות פקודת go get . כדי להתקין את חבילת YAML.v3:

ראשית, על המחשב שלך, פתח את אשת הפקודות שברצונך להשתמש בה, כמו מסוף הפקודות או PowerShell. בדוגמה זו, נעשה שימוש ב-PowerShell.

הבא, העתק את הפקודה למטה והפעל אותה ב-PowerShell. פקודה זו תוריד ותתקין את החבילה בשם gopkg.in/yaml.v3.

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

כתיבת סקריפט ההמרה

כדי ליצור סקריפט המרת YAML ל-JSON ב-Golang, עקוב אחרי ההוראות האלה.

1. פתח את עורך הקוד שלך וצור קובץ חדש בשם convert-os.go בתיקיית העבודה שלך.

2. העתק את הקוד למטה והדבק אותו בקובץ convert-os.go הריק. הקוד מייבא את החבילות הדרושות, מגדיר מבני זיכרון, מייבא את קובץ ה-YAML, וממיר ל-JSON לפני שמכתיב אותו לקובץ JSON בשם c:\temp\go_operating-systems.json.

// זה אומר ל-go איזו פונקציה לטעון.
 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 מהקובץ. ב-go נדרש טיפול בשגיאות עבור שלב זה.
 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 משתמשת בפקודה go run לאחר מכן שם של הקובץ הסקריפט. כדי להריץ את סקריפט ההמרה מ-YAML ל-JSON של Go, עקוב אחר השלבים הבאים.

1. על מחשבך, פתח את אש הפקודות שברצונך להשתמש בה. במערכות ההפעלה Windows, הפקודה go עובדת בכל אחת מהן: פרומפט הפקודות או PowerShell. בדוגמה זו יש ביצוע של PowerShell עבור go.

2. כשאתה ב-PowerShell, העתק את הפקודה למטה והרץ אותה ב-PowerShell. הפקודה תקרא לפקודת 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 ב-notepad.

Viewing the Go_operating-systems.json in notepad

סיכום

במאמר זה, למדת כיצד להמיר נתוני YAML וקבצים ל-JSON באמצעות סקריפטים ב-Python, PowerShell ו-Go. כעת שלמדת דרכים שונות להמיר YAML ל-JSON, איזו דרך אתה חושב שתשתמש בה יותר?

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