Come convertire XML in JSON in PowerShell

  1. Utilizzando XPath Selection, Hash Table e ConvertTo-Json per Convertire XML in JSON in PowerShell
  2. Utilizzando i Cmdlets ConvertTo-Json e ConvertFrom-Xml per Convertire XML in JSON in PowerShell
  3. Conclusione
Come convertire XML in JSON in PowerShell

Questa guida completa approfondisce la conversione di documenti XML in stringhe formattate JSON utilizzando PowerShell, un potente linguaggio di scripting e shell da riga di comando. I formati XML e JSON sono fondamentali nello scambio e nella memorizzazione dei dati, specialmente in ambienti in cui la configurazione e l’elaborazione dei dati sono fondamentali.

PowerShell, con il suo robusto insieme di cmdlets, semplifica questo processo di conversione. In questa guida esploriamo due metodi principali: il primo involve una combinazione di XPath Selection, Hash Table e ConvertTo-Json, e il secondo utilizza i cmdlets ConvertTo-Json e ConvertFrom-Xml.

La guida fornisce un approccio passo-passo, a partire dall’accesso alle chiavi e ai valori del documento XML, costruendo un hash di PowerShell per contenere i dati e infine convertendo l’hash in JSON. Ogni metodo è illustrato con esempi dettagliati e sintassi, garantendo una chiara comprensione dei processi coinvolti.

Utilizzando XPath Selection, Hash Table e ConvertTo-Json per Convertire XML in JSON in PowerShell

Accedere alle Chiavi e ai Valori del Documento XML

PowerShell consente di manipolare i nodi del documento XML utilizzando il cmdlet Select-Xml. Possiamo specificare espressioni XPath per trovare i nodi e i loro valori testuali in un documento XML.

Sintassi:

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

Creiamo un documento XML chiamato employeeinfo.xml con il seguente contenuto.

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>

Ora, andiamo ad accedere a ciascun nodo XML EmpId, EmpAge e EmpDesignation utilizzando il cmdlet Select-Xml come segue.

Codice:

$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 }

In questo esempio, il -Path è la posizione in cui si trova employeeinfo.xml. Poiché dobbiamo recuperare tre nodi per ogni oggetto dipendente, è stato utilizzato foreach di PowerShell.

L’espressione XPath è simile alla seguente per ciascun nodo. Il nodo EmpID può essere accesso tramite la query XPath "//Employee//EmpId".

Il nodo EmpAge può essere accesso tramite la query XPath "//Employee//EmpIAge". Il nodo EmpDesignation può essere accesso tramite la query XPath "//Employee//EmpDesignation".

Le variabili di riferimento, $empIds, $empAges e $empDesigs, contengono un array di valori per i rispettivi nodi XML. Scriviamo gli array nelle finestre della console di PowerShell.

Scrivi i valori degli array per i rispettivi nodi XML nella finestra della console di PowerShell

Costruire un Hash di PowerShell per Contenere i Dati

Non abbiamo un approccio diretto per convertire un documento XML in una stringa JSON. Pertanto, come mostrato nella sezione precedente, dobbiamo estrarre i dati XML e trasferirli in un hash di PowerShell come formato intermedio.

Costruiamo l’hash.

$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)

Abbiamo estratto i due oggetti dipendenti dall’XML per scopi dimostrativi e trasferito quei dati in due oggetti hash, $empObjHash1 e $empObjHash2. Poi, il $finalHash è stato creato combinando i due oggetti dipendenti.

Se stampiamo il $finalHash, apparirebbe come segue.

Estrai oggetti da XML a oggetti hash

Possiamo utilizzare il ciclo foreach per ispezionare il $finalHash in maggiore dettaglio.

Codice:

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

Output:

Usa il ciclo foreach per ispezionare il $finalHash in dettaglio

Il $finalHash è stato costruito con i dati pertinenti estratti dall’XML.

Convertire l’Hash in JSON

Poiché abbiamo un hash di PowerShell $finalHash, è possibile utilizzare il cmdlet ConvertTo-Json per creare un JSON dall’hash.

Sintassi:

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

Passiamo l’hash creato $finalHash per generare la stringa JSON, come mostrato di seguito.

Codice:

$finalHash | ConvertTo-Json

Output:

Converti Hash in JSON

Script completo di 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

Utilizzando i Cmdlets ConvertTo-Json e ConvertFrom-Xml per Convertire XML in JSON in PowerShell

In PowerShell, convertire dati da XML a formato JSON è un requisito comune, in particolare quando si interagisce con API web o servizi web moderni. PowerShell semplifica questo compito con i suoi cmdlets ConvertTo-Json e ConvertFrom-Xml.

Sintassi:

  • Get-Content: Legge il contenuto di un file.

    • -Path <String>: Specifica il percorso del file.
  • ConvertTo-Json: Converte un oggetto in una stringa formattata JSON.

    • -InputObject <Object>: Specifica l’oggetto da convertire.
    • -Depth <Int32>: Specifica la profondità delle gerarchie degli oggetti da includere.

Esempio

# 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

Nel nostro script, prima specifichiamo il percorso del file XML utilizzando la variabile $xmlFilePath. Utilizzando Get-Content, leggiamo il contenuto di questo file nella variabile $xmlContent.

Questo contenuto viene poi castato in un tipo [xml], creando un oggetto XML strutturato ($xmlObject). Questo oggetto viene passato a ConvertTo-Json per eseguire la conversione in formato JSON.

Infine, utilizziamo Write-Output per stampare la stringa JSON.

Output:

powershell convertire xml in json - output

Conclusione

In conclusione, questa guida ha dimostrato con successo i metodi pratici ed efficienti per convertire documenti XML in stringhe JSON utilizzando PowerShell. Mostrando due approcci distinti - uno che coinvolge l’estrazione dei dati XML in un hash di PowerShell e l’altro che utilizza il cmdlet ConvertFrom-Xml - la guida offre opzioni versatili adatte a diverse esigenze e scenari degli utenti.

Le istruzioni passo-passo, insieme ai frammenti di codice pertinenti e agli output, consentono ai lettori di afferrare prontamente il concetto e applicare questi metodi in situazioni del mondo reale. La flessibilità e la potenza di PowerShell nella gestione e trasformazione dei formati di dati sono evidenti, rendendolo uno strumento indispensabile per amministratori e sviluppatori che si occupano di trasformazioni di dati XML e JSON.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
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.

Articolo correlato - PowerShell Convert