Hoe YAML naar JSON om te zetten [Python, PowerShell, Go]

Veel moderne tools, met name in configuratiebeheer en Infrastructure as Code (IaC) ruimtes, gebruiken JSON of YAML-bestanden om configuratiegegevens op te slaan. Als je gegevens van YAML naar JSON-formaat wilt converteren, dan is dit artikel voor jou.

In dit artikel leer je verschillende manieren om gegevens van YAML naar JSON-formaat om te zetten, inclusief scripting in Python, PowerShell en Go.

Vereisten

Als je de voorbeelden in deze tutorial wilt volgen, zorg er dan voor dat je

  • A code editor. This article will use Visual Studio Code version 1.55.1. Feel free to use any code editor you want.
  • Om te beginnen met het omzetten van YAML naar JSON, heb je een voorbeeld YAML-inhoud nodig. Kopieer de onderstaande inhoud naar een nieuw bestand genaamd besturingssystemen.yml. Sla het YAML-bestand op in je werkmap.
operating-systems.yml
Windows 10: 100
Windows Server 2019: 50
Windows Server 2022: 1
MacOS: 3
CentOS: 75
Photon: 12

Gebruik van Python om YAML naar JSON te converteren

Python is een uitstekende taal voor automatisering. Maar wist je dat je de mogelijkheden van Python kunt uitbreiden en het kunt gebruiken om documenten van YAML naar JSON te converteren? En je hoeft slechts een paar stappen uit te voeren om snel YAML naar JSON te converteren.

De voorbeeld in deze sectie vereist dat je Python 3.9 en PIP hebt geïnstalleerd (de laatste versie op het moment van schrijven is 21.0.1).

YAML-ondersteuning toevoegen aan Python

Python heeft standaard geen ondersteuning voor YAML. Dat betekent dat Python standaard geen YAML-documenten kan lezen of interpreteren. Om YAML-ondersteuning aan Python toe te voegen, moet je eerst de PyYAML-module installeren.

Om de PyYAML-module te installeren, moet je het pip-commando uitvoeren, wat de pakketinstallateur is voor Python. Volg hiervoor deze stappen.

Ten eerste, open je voorkeurscommando-interpreter, zoals de opdrachtprompt of PowerShell. Het pip-commando zou in beide moeten werken. Dit voorbeeld gebruikt PowerShell.

Vervolgens voer je het onderstaande commando uit in PowerShell. Dit commando installeert de PyYAML-module.

pip install pyyaml

Zoals je kunt zien in de onderstaande schermafbeelding, heeft pip de nieuwste versie van PyYAML geïnstalleerd (5.4.1 op het moment van schrijven).

Installing the PyYAML module

Het Conversiescript Schrijven

Nu je de vereiste module (PyYAML) hebt geïnstalleerd, ben je klaar om je conversiescript te schrijven. Volg deze stappen om het YAML naar JSON Python-script te maken.

1. Open je code-editor en maak een nieuw bestand genaamd convert-os.py in je werkdirectory. Dit bestand is je script.

2. Kopieer de onderstaande code en plak het in je lege convert-os.py-bestand. Dit script leest de YAML-inhoud van operating-systems.yml, converteert de inhoud naar JSON-formaat, en schrijft de JSON-uitvoer naar het python_operating-systems.json-bestand.

## convert-os.py
## Importeer de modules om JSON & YAML te verwerken
import yaml
import json

## Maak een variabele aan om de te importeren gegevens vast te houden
os_list = {}

## Lees het YAML-bestand in
with open("c:\temp\operating-systems.yml") as infile:
     # Marshall de YAML naar de eerder gedefinieerde variabele os_list = yaml.load(infile, Loader=yaml.FullLoader)     # Print de lijst naar de console. 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:
     # Marshall de JSON, door "indent" in te stellen wordt het bestand leesbaarder json.dump(os_list, outfile, indent=4) print("JSON-bestand geschreven.")

3. Sla het convert-os.py-script op.

Uitvoeren van het Conversiescript

Na het maken van het conversiescript is het tijd om het te testen. Om het YAML naar JSON Python-script uit te voeren, volg je deze stappen:

1. Open een terminalvenster. Dit artikel maakt gebruik van PowerShell, maar de opdrachtprompt (CMD) zou net zo goed werken.

2. Kopieer de onderstaande opdracht, plak deze in PowerShell en druk op Enter. Deze opdracht voert het uitvoerbare programma Python uit om het script convert-os.py aan te roepen dat je in het vorige gedeelte hebt gemaakt.

python c:\temp\convert-os.py

Na het uitvoeren van de opdracht zou je een vergelijkbare uitvoer op het scherm moeten zien en dezelfde uitvoer moet opgeslagen zijn in het bestand c:\temp\python_operating-systems.json.

Running the YAML to JSON conversion script using Python

3. Als laatste stap, open het JSON-bestand met de naam python_operating-systems.json dat het convert-os.py Python-script zou moeten hebben aangemaakt. Om het bestand bijvoorbeeld in Notepad te openen, voer je de onderstaande opdracht uit in PowerShell.

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

Gebruik van PowerShell om YAML naar JSON om te zetten

PowerShell is in staat om tekstbestanden te wijzigen en objecten naar verschillende formaten om te zetten, waaronder JSON. Omdat PowerShell uitbreidbaar is, kun je PowerShell gebruiken om YAML naar JSON-formaat om te zetten met de juiste module.

YAML-ondersteuning toevoegen aan PowerShell

PowerShell heeft ingebouwde ondersteuning voor het verwerken van JSON-content, maar niet voor YAML. Gelukkig is er een module die PowerShell uitbreidt om YAML-bestanden te ondersteunen. Deze module heet PowerShell-yaml, en de nieuwste versie op het moment van schrijven is 0.4.2. Volg deze stappen om de module te installeren.

1. Open een PowerShell-sessie op je computer.

2. Kopieer de onderstaande opdracht, plak deze in PowerShell en druk op Enter. Deze opdracht maakt gebruik van de Install-Module cmdlet om de PowerShell-yaml module te installeren.

Install-Module PowerShell-yaml

3. Na het installeren van de module worden er twee nieuwe cmdlets beschikbaar in PowerShell als onderdeel van de PowerShell-yaml module. Deze nieuwe cmdlets zijn:

ConvertFrom-Yaml – de cmdlet om YAML-gegevens naar een hash-tabel om te zetten.

ConvertTo-Yaml – de cmdlet om hash-tabel objecten naar YAML-gegevens om te zetten.

Om te bevestigen dat beide cmdlets beschikbaar zijn in PowerShell, voer de onderstaande opdracht uit in PowerShell.

Get-Command -Module PowerShell-yaml

Zoals je hieronder kunt zien, heeft de Get-Command cmdlet de cmdlets van de PowerShell-yaml module vermeld.

Getting the PowerShell-yaml cmdlets

Het schrijven van het conversiescript

Volg deze instructies om het YAML naar JSON conversie PowerShell-script te maken.

1. Open je code-editor en maak een nieuw bestand genaamd convert-os.ps1 in je werkdirectory.

2. Kopieer de onderstaande code en plak deze in het lege convert-os.ps1 bestand. De onderstaande code leest het bestand operating-systems.yml en converteert het naar JSON. Zodra het in JSON is, wordt het vervolgens opgeslagen in het bestand PowerShell_operating-systems.json.

#convert-os.ps1
 #Lees het YAML-bestand met Get-Content en converteer de gegevens naar een hashtable met ConvertFrom-Yaml. De variabele $os_list slaat het hashtable-object op.
 $os_list = (Get-Content -Path "C:\temp\operating-systems.yml" | ConvertFrom-Yaml)
 #Converteer het hashtable-object in de variabele $os_list naar JSON-formaat met ConvertTo-Json. Zodra het in JSON is, sla het op in het bestand C:\temp\PowerShell_operating-systems.json met Set-Content.
 Set-Content -Path "C:\temp\PowerShell_operating-systems.json" -Value ($os_list | ConvertTo-Json)

3. Sla het bestand convert-os.ps1 op.

Het Uitvoeren van het Conversiescript

Nu je je conversiescript hebt gemaakt, is de volgende stap om het uit te voeren om YAML naar JSON te converteren. Volg deze stappen om het PowerShell-conversiescript uit te voeren.

  1. Open een PowerShell-venster als je er nog geen hebt geopend.

2. Kopieer de onderstaande opdracht, plak deze in PowerShell en druk op Enter. Deze opdracht roept het convert-os.ps1 script aan dat je hebt gemaakt in de vorige sectie.

c:\temp\convert-os.ps1

3. Na het uitvoeren van het script, open het JSON-uitvoerbestand C:\temp\PowerShell_besturingssystemen.json dat het convert-os.ps1-script heeft aangemaakt in de vorige stap. Om dit te doen, voer je de onderstaande opdracht uit in PowerShell om het PowerShell_besturingssystemen.json te openen in notepad.

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

Gebruik Go om YAML naar JSON om te zetten

Python en PowerShell zijn beide hoog-niveau talen. Het feit dat ze hoog-niveau zijn, maakt het schrijven van scripts eenvoudiger, maar neemt ook een beetje controle weg. Aan de andere kant is Go een laag-niveau taal, wat het importeren van YAML-gegevens complexer maakt.

Het voorbeeld in deze sectie zal Go gebruiken. De nieuwste versie op het moment van schrijven is go1.16.3. Als je nog geen Go hebt, raadpleeg dan de download en installatie pagina om het op je computer te installeren.

YAML-ondersteuning toevoegen aan Go

Net als PowerShell en Python maakt JSON-ondersteuning deel uit van de kernbibliotheken van Go, maar YAML niet. Om YAML-ondersteuning toe te voegen in Go, moet je eerst het YAML.v3 pakket installeren met behulp van het go get commando. Om het YAML.v3 pakket te installeren:

Eerst, op je computer, open je de opdrachtshell die je wilt gebruiken, zoals de opdrachtprompt of PowerShell. Dit voorbeeld gebruikt PowerShell.

Next, kopieer de onderstaande opdracht en voer deze uit in PowerShell. Deze opdracht zal het pakket met de naam gopkg.in/yaml.v3 downloaden en installeren.

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

Het schrijven van het conversiescript

Volg deze instructies om het Go-script voor de conversie van YAML naar JSON te maken.

1. Open je code-editor en maak een nieuw bestand genaamd convert-os.go in je werkmap.

2. Kopieer de onderstaande code en plak deze in het lege bestand convert-os.go. De code importeert de vereiste pakketten, definieert enkele geheugenstructuren, importeert het YAML-bestand en converteert het naar JSON voordat het naar een JSON-bestand genaamd c:\temp\go_operating-systems.json wordt geschreven.

// Dit vertelt go welke functie geladen moet worden.
 package main
 // Importeer pakketten:
 import (
  // JSON-module
     "encoding/json"
  // Voor het schrijven van uitvoer naar het scherm
     "fmt"
  // Voor het lezen en schrijven van bestanden
     "io/ioutil"
 // YAML-module
     "gopkg.in/yaml.v3"
 )
 // Definieer twee "Structs", dit zijn gegevensstructuren in het geheugen, en komen overeen met
 // de vorm van de YAML- en JSON-bestanden.
 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() {
   // Laat de gebruiker weten dat het proces is gestart
     fmt.Println("Parsing YAML file")
 // Definieer het pad naar het invoerbestand
 var fileName string = "c:\temp\operating-systems.yml"
 // Laad de YAML uit het bestand. Go vereist foutafhandeling voor deze stap.
 yamlFile, err := ioutil.ReadFile(fileName)
     if err != nil {
         fmt.Printf("Error reading YAML file: %s\n", err)
         return
     }
 // Haal de YAML uit in je Struct
     var oses operatingSystems
     yaml.Unmarshal(yamlFile, &oses)
 // Maak de JSON Struct, gebruikmakend van de gegevens uit de YAML Struct
 var osesjson = operatingSystemsjson{
         Windows10:         oses.Windows10,
         WindowsServer2019: oses.WindowsServer2019,
         WindowsServer2022: oses.WindowsServer2022,
         MacOS:             oses.MacOS,
         CentOS:            oses.CentOS,
         Photon:            oses.Photon,
     }
 // Creëer een string om in JSON-indeling uit te voeren.
 jsonOutput, err := json.Marshal(osesjson)
 // Druk het resultaat af op het scherm. Let op dat %+v betekent dat
   // de variabelenaam wordt afgedrukt met de gegevens. Daarom
   // zijn er geen spaties in de uitvoer van Kay-namen.
     fmt.Printf("Result: %+v\n", osesjson)
 // schrijf het JSON-bestand
 err = ioutil.WriteFile("c:\temp\Go_operating-systems.json", jsonOutput, 0644)
 }

3. Bewaar het bestand convert-os.go.

Het Uitvoeren van het Conversiescript

Het uitvoeren van Go-scripts gebeurt met het go run commando gevolgd door de bestandsnaam van het script. Om het YAML naar JSON conversiescript uit te voeren, volg je deze stappen.

1. Open op je computer de opdrachtshell die je wilt gebruiken. Op Windows werkt go zowel in de opdrachtprompt als in PowerShell. In dit voorbeeld gebruiken we PowerShell om go uit te voeren.

2. Zodra je in PowerShell bent, kopieer je de onderstaande opdracht en voer je deze uit in PowerShell. Deze opdracht zal het go run commando oproepen om het c:\temp\convert-os.go script uit te voeren.

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

3. Nadat het script is uitgevoerd, open je het uitvoerbestand C:\temp\Go_operating-systems.json dat is aangemaakt door het convert-os.go script in de vorige stap. Dit voorbeeld opent het bestand Go_operating-systems.json in Kladblok.

Viewing the Go_operating-systems.json in notepad

Conclusie

In dit artikel heb je geleerd hoe je YAML-gegevens en -bestanden naar JSON kunt converteren met scripts in Python, PowerShell en Go. Nu je verschillende manieren hebt geleerd om YAML naar JSON te converteren, welke manier denk je dat je vaker zult gebruiken?

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