Comment convertir YAML en JSON [Python, PowerShell, Go]

Beaucoup d’outils modernes, en particulier dans la gestion de la configuration et les espaces Infrastructure as Code (IaC), utilisent des fichiers JSON ou YAML pour stocker les données de configuration. Si vous avez besoin de convertir des données du format YAML au format JSON, cet article est pour vous.

Dans cet article, vous apprendrez plusieurs façons de convertir des données YAML au format JSON, y compris le script en Python, PowerShell et Go.

Prérequis

Si vous souhaitez suivre les exemples de ce tutoriel, assurez-vous d’avoir

  • A code editor. This article will use Visual Studio Code version 1.55.1. Feel free to use any code editor you want.
  • Pour commencer à convertir le YAML en JSON, vous avez besoin d’un contenu YAML d’exemple. Copiez le contenu ci-dessous dans un nouveau fichier appelé operating-systems.yml. Enregistrez le fichier YAML dans votre répertoire de travail.
operating-systems.yml
Windows 10: 100
Windows Server 2019: 50
Windows Server 2022: 1
MacOS: 3
CentOS: 75
Photon: 12

Utilisation de Python pour convertir YAML en JSON

Python est un excellent langage à utiliser pour l’automatisation. Mais saviez-vous que vous pouvez étendre les capacités de Python et l’utiliser pour convertir des documents de YAML à JSON ? Et vous n’avez besoin que d’effectuer quelques étapes et commencez à convertir le YAML en JSON en un rien de temps.

L’exemple dans cette section nécessite que vous ayez installé Python 3.9 et PIP (la dernière version à ce jour est la 21.0.1).

Ajout du support YAML à Python

Python n’a pas de support natif pour YAML. En d’autres termes, Python ne peut pas lire ou interpréter les documents YAML par défaut. Pour ajouter le support YAML à Python, vous devez d’abord installer le module PyYAML.

Pour installer le module PyYAML, vous devrez exécuter la commande pip, qui est l’installeur de paquets pour Python. Pour ce faire, suivez ces étapes.

Tout d’abord, ouvrez votre interpréteur de commandes préféré, comme l’invite de commande ou PowerShell. La commande pip devrait fonctionner dans l’un ou l’autre. Cet exemple utilise PowerShell.

Ensuite, exécutez la commande ci-dessous dans PowerShell. Cette commande installe le module PyYAML.

pip install pyyaml

Comme vous pouvez le voir dans la capture d’écran ci-dessous, pip a installé la dernière version de PyYAML (5.4.1 à ce jour).

Installing the PyYAML module

Écriture du script de conversion

Maintenant que vous avez installé le module requis (PyYAML), vous êtes prêt à écrire votre script de conversion. Pour créer le script Python YAML vers JSON, suivez ces étapes.

1. Ouvrez votre éditeur de code et créez un nouveau fichier appelé convert-os.py dans votre répertoire de travail. Ce fichier est votre script.

2. Copiez le code ci-dessous et collez-le dans votre fichier convert-os.py vide. Ce script lira le contenu YAML de operating-systems.yml, convertira le contenu au format JSON, et écrira la sortie JSON dans le fichier python_operating-systems.json.

## convert-os.py
## Importez les modules pour gérer JSON & YAML
import yaml
import json

## Créez une variable pour contenir les données à importer
os_list = {}

## Lire le fichier YAML
with open("c:\temp\operating-systems.yml") as infile:
     # Marshall le YAML dans la variable définie ci-dessus os_list = yaml.load(infile, Loader=yaml.FullLoader)     # Affichez la liste dans la 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 le JSON, en définissant "indent" rend le fichier plus lisible json.dump(os_list, outfile, indent=4) print("Fichier JSON écrit.")

3. Enregistrez le script convert-os.py.

Exécution du script de conversion

Après avoir créé le script de conversion, il est temps de le tester. Pour exécuter le script Python de YAML à JSON, procédez comme suit :

1. Ouvrez une fenêtre de terminal. Cet article utilise PowerShell, mais l’invite de commande (CMD) fonctionnerait tout aussi bien.

2. Copiez la commande ci-dessous, collez-la dans PowerShell, et appuyez sur Entrée. Cette commande exécute le programme exécutable Python pour invoquer le script convert-os.py que vous avez créé dans la section précédente.

python c:\temp\convert-os.py

Après avoir exécuté la commande, vous devriez voir une sortie similaire à l’image ci-dessous. Comme vous pouvez le voir, la commande a affiché la sortie JSON à l’écran et a sauvegardé la même sortie dans le fichier c:\temp\python_operating-systems.json.

Running the YAML to JSON conversion script using Python

3. Enfin, ouvrez le fichier JSON appelé python_operating-systems.json que le script Python convert-os.py devrait avoir créé. Dans cet exemple, pour ouvrir le fichier dans le bloc-notes, exécutez la commande ci-dessous dans PowerShell.

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

Utilisation de PowerShell pour convertir YAML en JSON

PowerShell est capable de modifier des fichiers texte et de convertir des objets en plusieurs formats, y compris JSON. Étant donné que PowerShell est extensible, vous pouvez utiliser PowerShell pour convertir le format YAML en JSON avec le bon module.

Ajout de la prise en charge YAML à PowerShell

PowerShell prend en charge intégrée pour la manipulation de contenu JSON, mais pas pour YAML. Heureusement, il existe un module qui étend PowerShell pour prendre en charge les fichiers YAML. Ce module s’appelle PowerShell-yaml, et la dernière version à ce jour est la 0.4.2. Suivez ces étapes pour installer le module.

1. Sur votre ordinateur, ouvrez une session PowerShell.

2. Copiez la commande ci-dessous, collez-la dans PowerShell et appuyez sur Entrée. Cette commande utilise la cmdlet Install-Module pour installer le module PowerShell-yaml.

Install-Module PowerShell-yaml

3. Après avoir installé le module, deux nouvelles cmdlets seront disponibles dans PowerShell en tant que partie du module PowerShell-yaml. Ces nouvelles cmdlets sont :

ConvertFrom-Yaml – la cmdlet pour convertir les données YAML en une table de hachage.

ConvertTo-Yaml – la cmdlet pour convertir des objets de table de hachage en données YAML.

Pour confirmer que les deux cmdlets sont disponibles dans PowerShell, exécutez la commande ci-dessous dans PowerShell.

Get-Command -Module PowerShell-yaml

Comme vous pouvez le voir ci-dessous, la cmdlet Get-Command a répertorié les cmdlets du module PowerShell-yaml.

Getting the PowerShell-yaml cmdlets

Rédaction du script de conversion

Pour créer le script PowerShell de conversion YAML en JSON, suivez ces instructions.

1. Ouvrez votre éditeur de code et créez un nouveau fichier appelé convert-os.ps1 dans votre répertoire de travail.

2. Copiez le code ci-dessous et collez-le dans le fichier convert-os.ps1. Le snippet de code ci-dessous lit le fichier operating-systems.yml et le convertit en JSON. Une fois en JSON, il enregistre le JSON dans le fichier PowerShell_operating-systems.json.

#convert-os.ps1
 #Lisez le fichier YAML en utilisant Get-Content et convertissez les données en une table de hachage à l'aide de ConvertFrom-Yaml. La variable $os_list stocke l'objet table de hachage.
 $os_list = (Get-Content -Path "C:\temp\operating-systems.yml" | ConvertFrom-Yaml)
 #Convertissez l'objet table de hachage dans la variable $os_list au format JSON en utilisant ConvertTo-Json. Une fois en JSON, enregistrez-le dans le fichier C:\temp\PowerShell_operating-systems.json en utilisant Set-Content.
 Set-Content -Path "C:\temp\PowerShell_operating-systems.json" -Value ($os_list | ConvertTo-Json)

3. Enregistrez le fichier convert-os.ps1.

Exécution du script de conversion

Maintenant que vous avez créé votre script de conversion, la prochaine étape consiste à l’exécuter pour convertir le YAML en JSON. Pour exécuter le script de conversion PowerShell, suivez ces étapes.

  1. Ouvrez une fenêtre PowerShell si vous n’en avez pas encore ouverte.

2. Copiez la commande ci-dessous, collez-la dans PowerShell et appuyez sur Entrée. Cette commande invoque le script convert-os.ps1 que vous avez créé dans la section précédente.

c:\temp\convert-os.ps1

3. Après avoir exécuté le script, ouvrez le fichier de sortie JSON C:\temp\PowerShell_systèmes-d’exploitation.json que le script convert-os.ps1 a créé à l’étape précédente. Pour ce faire, exécutez la commande ci-dessous dans PowerShell pour ouvrir le fichier PowerShell_systèmes-d’exploitation.json dans le bloc-notes.

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

Utilisation de Go pour convertir YAML en JSON

Python et PowerShell sont tous deux des langages de haut niveau. Être de haut niveau rend l’écriture de scripts plus facile mais enlève également un peu de contrôle. En revanche, Go est un langage de bas niveau, ce qui rend l’importation de données YAML plus complexe.

L’exemple de cette section utilisera Go. La dernière version à ce jour est go1.16.3. Si vous n’avez pas encore Go, consultez la page de téléchargement et d’installation pour l’installer sur votre ordinateur.

Ajout de la prise en charge YAML à Go

Comme PowerShell et Python, la prise en charge JSON fait partie des bibliothèques de base de Go, mais ce n’est pas le cas pour YAML. Pour ajouter la prise en charge YAML à Go, vous devez d’abord installer le package YAML.v3 en utilisant la commande go get. Pour installer le package YAML.v3 :

Tout d’abord, sur votre ordinateur, ouvrez l’invite de commandes que vous souhaitez utiliser, comme l’invite de commandes ou PowerShell. Cet exemple utilise PowerShell.

Ensuite, copiez la commande ci-dessous et exécutez-la dans PowerShell. Cette commande téléchargera et installera le package nommé gopkg.in/yaml.v3.

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

Écriture du script de conversion

Pour créer le script de conversion YAML vers JSON en Go, suivez ces instructions.

1. Ouvrez votre éditeur de code et créez un nouveau fichier appelé convert-os.go dans votre répertoire de travail.

2. Copiez le code ci-dessous et collez-le dans le fichier convert-os.go vierge. Le code importe les packages nécessaires, définit certaines structures de mémoire, importe le fichier YAML et le convertit en JSON avant de l’écrire dans un fichier JSON appelé c:\temp\go_operating-systems.json.

// Cela indique à go quelle fonction charger.
 package main
 // Importer les packages :
 import (
  // Module JSON
     "encoding/json"
  // Pour écrire la sortie à l'écran
     "fmt"
  // Pour lire et écrire des fichiers
     "io/ioutil"
 // Module YAML
     "gopkg.in/yaml.v3"
 )
 // Définir deux "Structs", ce sont des structures de données en mémoire, et correspondent
 // à la forme des fichiers YAML et 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() {
   // Informer l'utilisateur que le processus a commencé
     fmt.Println("Parsing YAML file")
 // Définir le chemin vers le fichier d'entrée
 var fileName string = "c:\temp\operating-systems.yml"
 // Charger le YAML à partir du fichier. Go nécessite une gestion des erreurs pour cette étape.
 yamlFile, err := ioutil.ReadFile(fileName)
     if err != nil {
         fmt.Printf("Error reading YAML file: %s\n", err)
         return
     }
 // Extraire le YAML dans votre Struct
     var oses operatingSystems
     yaml.Unmarshal(yamlFile, &oses)
 // Créer le Struct JSON, en utilisant les données du Struct YAML
 var osesjson = operatingSystemsjson{
         Windows10:         oses.Windows10,
         WindowsServer2019: oses.WindowsServer2019,
         WindowsServer2022: oses.WindowsServer2022,
         MacOS:             oses.MacOS,
         CentOS:            oses.CentOS,
         Photon:            oses.Photon,
     }
 // Créer une chaîne pour afficher au format JSON.
 jsonOutput, err := json.Marshal(osesjson)
 // Imprimer le résultat à l'écran. Remarquez que %+v signifie que 
   // le nom de la variable est imprimé avec les données. C'est pourquoi
   // il n'y a pas d'espaces dans les noms de clés de sortie.
     fmt.Printf("Result: %+v\n", osesjson)
 //écrire le fichier JSON
 err = ioutil.WriteFile("c:\temp\Go_operating-systems.json", jsonOutput, 0644)
 }

3. Enregistrez le fichier convert-os.go.

Exécution du script de conversion

L’exécution de scripts Go utilise la commande go run suivie du nom du script. Pour exécuter le script de conversion YAML en JSON Go, procédez comme suit.

1. Sur votre ordinateur, ouvrez l’invite de commande que vous souhaitez utiliser. Sous Windows, la commande go fonctionnera soit dans l’invite de commandes, soit dans PowerShell. Cet exemple utilise PowerShell pour exécuter go.

2. Une fois dans PowerShell, copiez la commande ci-dessous et exécutez-la dans PowerShell. Cette commande invoquera la commande go run pour exécuter le script c:\temp\convert-os.go.

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

3. Après avoir exécuté le script, ouvrez le fichier de sortie C:\temp\Go_operating-systems.json que le script convert-os.go a créé à l’étape précédente. Cet exemple ouvre le fichier Go_operating-systems.json dans le bloc-notes.

Viewing the Go_operating-systems.json in notepad

Conclusion

Dans cet article, vous avez appris comment convertir des données et des fichiers YAML en JSON en utilisant des scripts en Python, PowerShell et Go. Maintenant que vous avez appris différentes façons de convertir YAML en JSON, quelle méthode pensez-vous utiliser le plus ?

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