Come convertire XML in JSON in PowerShell
-
Utilizzando
XPath Selection
,Hash Table
eConvertTo-Json
per Convertire XML in JSON in PowerShell -
Utilizzando i Cmdlets
ConvertTo-Json
eConvertFrom-Xml
per Convertire XML in JSON in PowerShell - Conclusione

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.
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.
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:
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:
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:
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.
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.