Como Converter XML para JSON no PowerShell

  1. Usando XPath Selection, Hash Table e ConvertTo-Json para Converter XML em JSON no PowerShell
  2. Usando ConvertTo-Json e ConvertFrom-Xml Cmdlets para Converter XML em JSON no PowerShell
  3. Conclusão
Como Converter XML para JSON no PowerShell

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.

Escreva os valores de arrays para os respectivos nós XML na janela do Console 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.

Extrair objetos de XML para objetos hash

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:

Use o loop foreach para inspecionar o $finalHash em detalhes.

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:

Converter Hash para JSON

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:

converter xml para 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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
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.

Artigo relacionado - PowerShell Convert