Comment convertir XML en JSON dans PowerShell

  1. Utilisation de Sélection XPath, Table de Hachage, et ConvertTo-Json pour Convertir XML en JSON dans PowerShell
  2. Utilisation des Cmdlets ConvertTo-Json et ConvertFrom-Xml pour Convertir XML en JSON dans PowerShell
  3. Conclusion
Comment convertir XML en JSON dans PowerShell

Ce guide complet examine la conversion de documents XML en chaînes formatées JSON à l’aide de PowerShell, un langage de script puissant et un shell en ligne de commande. Les formats XML et JSON sont fondamentaux dans l’échange et le stockage de données, en particulier dans les environnements où la configuration et le traitement des données sont essentiels.

PowerShell, avec son ensemble robuste de cmdlets, simplifie ce processus de conversion. Nous explorons deux méthodes principales dans ce guide : la première impliquant une combinaison de Sélection XPath, Table de hachage, et ConvertTo-Json, et la seconde utilisant les cmdlets ConvertTo-Json et ConvertFrom-Xml.

Le guide fournit une approche étape par étape, commençant par l’accès aux clés et valeurs du document XML, la construction d’une table de hachage PowerShell pour contenir les données, et enfin la conversion de la table de hachage en JSON. Chaque méthode est illustrée par des exemples détaillés et des syntaxes, garantissant une compréhension claire des processus impliqués.

Utilisation de Sélection XPath, Table de Hachage, et ConvertTo-Json pour Convertir XML en JSON dans PowerShell

Accéder aux Clés et Valeurs du Document XML

PowerShell permet de manipuler les nœuds de documents XML en utilisant le cmdlet Select-Xml. Nous pouvons spécifier des expressions XPath pour trouver des nœuds et leurs valeurs textuelles dans un document XML.

Syntaxe :

Select-Xml
[-XPath] <string>
[-Path] <string[]>
[-Namespace <hashtable>]
[<CommonParameters>]

Créons un document XML appelé employeeinfo.xml avec le contenu suivant.

XML - employeeinfo.xml :

<?xml version="1.0" encoding="utf-8"?>
<Employees>
    <Employee>
        <EmpId>1</EmpId>
        <EmpAge>45</EmpAge>
        <EmpDesignation>SSE</EmpDesignation>
    </Employee>
    <Employee>
        <EmpId>2</EmpId>
        <EmpAge>34</EmpAge>
        <EmpDesignation>Junior SE</EmpDesignation>
    </Employee>
</Employees>

Maintenant, nous allons accéder à chaque nœud XML EmpId, EmpAge, et EmpDesignation en utilisant le cmdlet Select-Xml comme suit.

Code :

$empIds = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpId" | foreach { $_.node.InnerText }
$empAges = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpAge" | foreach { $_.node.InnerText }
$empDesigs = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpDesignation" | foreach { $_.node.InnerText }

Dans cet exemple, le -Path est l’emplacement où se trouve le employeeinfo.xml. Étant donné que nous devons récupérer trois nœuds par objet employé, foreach de PowerShell a été utilisé.

L’expression XPath ressemble à ce qui suit pour chaque nœud. Le nœud EmpID peut être accessible par la requête XPath "//Employee//EmpId".

Le nœud EmpAge peut être accessible par la requête XPath "//Employee//EmpIAge". Le nœud EmpDesignation peut être accessible par la requête XPath "//Employee//EmpDesignation".

Les variables de référence, $empIds, $empAges, et $empDesigs, contiennent un tableau de valeurs pour les nœuds XML respectifs. Écrivons les tableaux dans les fenêtres de console PowerShell.

Écrivez les valeurs de tableau pour les nœuds XML respectifs dans la fenêtre de console PowerShell.

Construire une Table de Hachage PowerShell pour Contenir les Données

Nous n’avons pas d’approche directe pour convertir un document XML en chaîne JSON. Par conséquent, comme montré dans la section ci-dessus, nous devons extraire les données XML et les pousser dans une table de hachage PowerShell comme format intermédiaire.

Construisons la table de hachage.

$empObjHash1 = @{
    EmpId          = $empIds[0];
    EmpAge         = $empAges[0];
    EmpDesignation = $empDesigs[0];
}
$empObjHash2 = @{
    EmpId          = $empIds[1];
    EmpAge         = $empAges[1];
    EmpDesignation = $empDesigs[1];
}

$finalHash = @{}
$finalHash.Add("emp1", $empObjHash1)
$finalHash.Add("emp2", $empObjHash2)

Nous avons extrait deux objets employés du XML à des fins de démonstration et poussé ces données dans deux objets de hachage, $empObjHash1 et $empObjHash2. Ensuite, le $finalHash est créé en poussant les deux objets employés.

Si nous imprimons le $finalHash, il ressemblerait à ce qui suit.

Extraire des objets de XML vers des objets hash

Nous pouvons utiliser la boucle foreach pour inspecter le $finalHash plus en détail.

Code :

foreach ($em in $finalHash.keys) {
    foreach ($emp in $finalHash[$em]) {
        foreach ($val in $emp.keys) {
            Write-Host "Key:" $val "Value:" $emp[$val]
        }
    }
}

Sortie :

Utilisez une boucle foreach pour inspecter le $finalHash en détail.

Le $finalHash a été construit avec les données pertinentes extraites du XML.

Convertir la Table de Hachage en JSON

Puisque nous avons une table de hachage PowerShell $finalHash, il est possible d’utiliser le cmdlet ConvertTo-Json pour créer un JSON à partir de la table de hachage.

Syntaxe :

ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]

Passons la table de hachage créée $finalHash pour créer la chaîne JSON, comme montré dans ce qui suit.

Code :

$finalHash | ConvertTo-Json

Sortie :

Convertir le hachage en JSON

Script complet PowerShell :

$empIds = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpId" | foreach { $_.node.InnerText }
$empAges = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpAge" | foreach { $_.node.InnerText }
$empDesigs = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpDesignation" | foreach { $_.node.InnerText }

$empObjHash1 = @{
    EmpId          = $empIds[0];
    EmpAge         = $empAges[0];
    EmpDesignation = $empDesigs[0];
}
$empObjHash2 = @{
    EmpId          = $empIds[1];
    EmpAge         = $empAges[1];
    EmpDesignation = $empDesigs[1];
}

$finalHash = @{}
$finalHash.Add("emp1", $empObjHash1)
$finalHash.Add("emp2", $empObjHash2)

foreach ($em in $finalHash.keys) {
    foreach ($emp in $finalHash[$em]) {

        foreach ($val in $emp.keys) {
            Write-Host "Key:" $val "Value:" $emp[$val]
        }
    }
}

$finalHash | ConvertTo-Json

Utilisation des Cmdlets ConvertTo-Json et ConvertFrom-Xml pour Convertir XML en JSON dans PowerShell

Dans PowerShell, la conversion de données du format XML vers le format JSON est une exigence courante, notamment lors de l’interfaçage avec des API web ou des services web modernes. PowerShell simplifie cette tâche avec ses cmdlets ConvertTo-Json et ConvertFrom-Xml.

Syntaxe :

  • Get-Content : Lit le contenu d’un fichier.

    • -Path <String> : Spécifie le chemin du fichier.
  • ConvertTo-Json : Convertit un objet en chaîne formatée JSON.

    • -InputObject <Object> : Spécifie l’objet à convertir.
    • -Depth <Int32> : Spécifie la profondeur des hiérarchies d’objets à inclure.

Exemple

# Path to the XML file
$xmlFilePath = "employeeinfo.xml"

# Read the content of the XML file and convert to XML object
$xml = New-Object XML
$xml.Load($xmlFilePath)

# Parse the XML and create an object array
$employeeArray = @()
foreach ($employee in $xml.Employees.Employee) {
    $empObject = [PSCustomObject]@{
        EmpId          = $employee.EmpId
        EmpAge         = $employee.EmpAge
        EmpDesignation = $employee.EmpDesignation
    }
    $employeeArray += $empObject
}

# Convert the array to JSON
$json = $employeeArray | ConvertTo-Json

# Display the result
Write-Output $json

Dans notre script, nous spécifions d’abord le chemin vers le fichier XML en utilisant la variable $xmlFilePath. En utilisant Get-Content, nous lisons le contenu de ce fichier dans la variable $xmlContent.

Ce contenu est ensuite casté en type [xml], créant un objet XML structuré ($xmlObject). Cet objet est passé à ConvertTo-Json pour effectuer la conversion au format JSON.

Enfin, nous utilisons Write-Output pour imprimer la chaîne JSON.

Sortie :

powershell convertir xml en json - sortie

Conclusion

En conclusion, ce guide a démontré avec succès les méthodes pratiques et efficaces de conversion de documents XML en chaînes JSON à l’aide de PowerShell. En présentant deux approches distinctes - l’une impliquant l’extraction des données XML dans une table de hachage PowerShell et l’autre utilisant le cmdlet ConvertFrom-Xml - le guide fournit des options polyvalentes adaptées à différents besoins et scénarios des utilisateurs.

Les instructions étape par étape, accompagnées de morceaux de code pertinents et de sorties, permettent aux lecteurs de saisir le concept facilement et d’appliquer ces méthodes dans des situations réelles. La flexibilité et la puissance de PowerShell dans la gestion et la transformation des formats de données sont évidentes, ce qui en fait un outil indispensable pour les administrateurs et les développeurs traitant des transformations de données XML et JSON.

Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

Article connexe - PowerShell Convert