Como Converter XML para JSON no PowerShell
-
Usando
XPath Selection
,Hash Table
eConvertTo-Json
para Converter XML em JSON no PowerShell -
Usando
ConvertTo-Json
eConvertFrom-Xml
Cmdlets para Converter XML em JSON no PowerShell - Conclusão

Este guia abrangente explora a conversão de documentos XML em strings formatadas em JSON usando PowerShell, uma poderosa linguagem de script e shell de linha de comando. Os formatos XML e JSON são fundamentais na troca e armazenamento de dados, especialmente em ambientes onde a configuração e o processamento de dados são cruciais.
PowerShell, com seu robusto conjunto de cmdlets, simplifica esse processo de conversão. Exploramos dois métodos principais neste guia: o primeiro envolvendo uma combinação de XPath Selection
, Hash Table
, e ConvertTo-Json
, e o segundo utilizando os cmdlets ConvertTo-Json
e ConvertFrom-Xml
.
O guia oferece uma abordagem passo a passo, começando com o acesso às chaves e valores do documento XML, construindo um hash do PowerShell para armazenar os dados, e finalmente convertendo o hash em JSON. Cada método é ilustrado com exemplos detalhados e sintaxe, garantindo uma compreensão clara dos processos envolvidos.
Usando XPath Selection
, Hash Table
e ConvertTo-Json
para Converter XML em JSON no PowerShell
Acessar Chaves e Valores do Documento XML
PowerShell permite manipular nós de documentos XML usando o cmdlet Select-Xml
. Podemos especificar expressões XPath
para encontrar nós e seus valores de texto em um documento XML.
Sintaxe:
Select-Xml
[-XPath] <string>
[-Path] <string[]>
[-Namespace <hashtable>]
[<CommonParameters>]
Vamos criar um documento XML chamado employeeinfo.xml
com o seguinte conteúdo.
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>
Agora, vamos acessar cada nó XML EmpId
, EmpAge
, e EmpDesignation
usando o cmdlet Select-Xml
da seguinte forma.
Código:
$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 }
Neste exemplo, o -Path
é a localização onde o employeeinfo.xml
está localizado. Como precisamos buscar três nós por objeto de funcionário, o foreach
do PowerShell foi utilizado.
A expressão XPath
se parece com a seguinte para cada nó. O nó EmpID
pode ser acessado pela consulta XPath
"//Employee//EmpId"
.
O nó EmpAge
pode ser acessado pela consulta XPath
"//Employee//EmpIAge"
. O nó EmpDesignation
pode ser acessado pela consulta XPath
"//Employee//EmpDesignation"
.
As variáveis de referência, $empIds
, $empAges
, e $empDesigs
, contêm um array de valores para respectivos nós XML. Vamos escrever os arrays nas janelas de console do PowerShell.
Construir um Hash do PowerShell para Armazenar Dados
Não temos uma abordagem direta para converter um documento XML em uma string JSON. Assim, como mostrado na seção acima, precisamos extrair os dados XML e empurrar esses dados para um hash do PowerShell como um formato intermediário.
Vamos construir o 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)
Extraímos dois objetos de funcionário do XML para fins de demonstração e empurramos esses dados para dois objetos hash, $empObjHash1
e $empObjHash2
. Em seguida, o $finalHash
é criado empurrando os dois objetos de funcionário.
Se imprimirmos o $finalHash
, ele se parecerá com o seguinte.
Podemos usar o loop foreach
para inspecionar o $finalHash
em mais detalhes.
Código:
foreach ($em in $finalHash.keys) {
foreach ($emp in $finalHash[$em]) {
foreach ($val in $emp.keys) {
Write-Host "Key:" $val "Value:" $emp[$val]
}
}
}
Saída:
O $finalHash
foi construído com os dados relevantes extraídos do XML.
Converter Hash em JSON
Uma vez que temos um hash do PowerShell $finalHash
, é possível usar o cmdlet ConvertTo-Json
para criar um JSON a partir do hash.
Sintaxe:
ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]
Vamos passar o hash criado $finalHash
para criar a string JSON, como mostrado a seguir.
Código:
$finalHash | ConvertTo-Json
Saída:
Script Completo do 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
Usando ConvertTo-Json
e ConvertFrom-Xml
Cmdlets para Converter XML em JSON no PowerShell
No PowerShell, converter dados de XML para o formato JSON é uma necessidade comum, particularmente ao interagir com APIs da web ou serviços web modernos. O PowerShell simplifica essa tarefa com seus cmdlets ConvertTo-Json
e ConvertFrom-Xml
.
Sintaxe:
-
Get-Content
: Lê o conteúdo de um arquivo.-Path <String>
: Especifica o caminho do arquivo.
-
ConvertTo-Json
: Converte um objeto em uma string formatada em JSON.-InputObject <Object>
: Especifica o objeto a ser convertido.-Depth <Int32>
: Especifica a profundidade das hierarquias de objetos a incluir.
Exemplo
# 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
Em nosso script, primeiro especificamos o caminho para o arquivo XML usando a variável $xmlFilePath
. Usando Get-Content
, lemos o conteúdo deste arquivo na variável $xmlContent
.
Este conteúdo é então convertido para um tipo [xml]
, criando um objeto XML estruturado ($xmlObject
). Este objeto é passado para ConvertTo-Json
para realizar a conversão para o formato JSON.
Finalmente, usamos Write-Output
para imprimir a string JSON.
Saída:
Conclusão
Em conclusão, este guia demonstrou com sucesso os métodos práticos e eficientes de converter documentos XML em strings JSON usando PowerShell. Ao apresentar duas abordagens distintas - uma envolvendo a extração de dados XML em um hash do PowerShell e outra utilizando o cmdlet ConvertFrom-Xml
- o guia fornece opções versáteis voltadas para diferentes necessidades e cenários dos usuários.
As instruções passo a passo, juntamente com os trechos de código relevantes e saídas, permitem que os leitores compreendam o conceito prontamente e apliquem esses métodos em situações do mundo real. A flexibilidade e o poder do PowerShell em lidar e transformar formatos de dados são evidentes, tornando-o uma ferramenta indispensável para administradores e desenvolvedores que lidam com transformações de dados 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.