PowerShell에서 XML을 JSON으로 변환하는 방법

  1. PowerShell에서 XPath 선택, 해시 테이블, 및 ConvertTo-Json을 사용하여 XML을 JSON으로 변환하기
  2. PowerShell에서 XML을 JSON으로 변환하기 위해 ConvertTo-JsonConvertFrom-Xml Cmdlet 사용하기
  3. 결론
PowerShell에서 XML을 JSON으로 변환하는 방법

이 포괄적인 가이드는 강력한 스크립트 언어인 PowerShell을 사용하여 XML 문서를 JSON 형식의 문자열로 변환하는 방법을 자세히 설명합니다. XML 및 JSON 형식은 데이터 교환 및 저장에 필수적이며, 특히 구성 및 데이터 처리가 중요한 환경에서 그렇습니다.

PowerShell은 강력한 cmdlet 세트를 통해 이 변환 프로세스를 단순화합니다. 이 가이드는 두 가지 주요 방법을 탐구합니다: 첫 번째 방법은 XPath 선택, 해시 테이블, 및 ConvertTo-Json의 조합을 포함하고, 두 번째 방법은 ConvertTo-JsonConvertFrom-Xml cmdlet을 활용합니다.

이 가이드는 XML 문서의 키와 값에 접근하는 것부터 시작하여, 데이터를 저장할 PowerShell 해시를 구성하고, 마지막으로 해시를 JSON으로 변환하는 단계별 접근 방식을 제공합니다. 각 방법은 프로세스를 명확히 이해할 수 있도록 상세한 예제와 구문으로 설명됩니다.

PowerShell에서 XPath 선택, 해시 테이블, 및 ConvertTo-Json을 사용하여 XML을 JSON으로 변환하기

XML 문서 키 및 값 접근

PowerShell은 Select-Xml cmdlet을 사용하여 XML 문서 노드를 조작할 수 있게 합니다. 우리는 XML 문서에서 노드와 해당 텍스트 값을 찾기 위해 XPath 표현식을 지정할 수 있습니다.

구문:

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

다음 내용을 가진 employeeinfo.xml이라는 XML 문서를 생성하겠습니다.

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>

이제 Select-Xml cmdlet을 사용하여 각 XML 노드 EmpId, EmpAge, 및 EmpDesignation에 접근하겠습니다.

코드:

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

이 예제에서 -Pathemployeeinfo.xml이 위치한 경로입니다. 각 직원 객체당 세 개의 노드를 가져와야 하므로 PowerShell foreach가 사용되었습니다.

각 노드에 대한 XPath 표현식은 다음과 같습니다. EmpID 노드는 XPath 쿼리 "//Employee//EmpId"로 접근할 수 있습니다.

EmpAge 노드는 XPath 쿼리 "//Employee//EmpIAge"로 접근할 수 있습니다. EmpDesignation 노드는 XPath 쿼리 "//Employee//EmpDesignation"로 접근할 수 있습니다.

참조 변수 $empIds, $empAges, 및 $empDesigs는 각 XML 노드에 대한 값의 배열을 포함하고 있습니다. 배열을 PowerShell 콘솔 창에 출력해 보겠습니다.

XML 노드에 대한 배열 값을 PowerShell 콘솔 창에 작성하십시오.

데이터를 저장할 PowerShell 해시 구성

XML 문서를 JSON 문자열로 변환하는 간단한 접근 방식이 없습니다. 따라서 위 섹션에서 보인 것처럼 XML 데이터를 추출하고 그 데이터를 중간 형식으로 PowerShell 해시에 추가해야 합니다.

해시를 구성해 보겠습니다.

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

우리는 demostration을 위해 XML에서 두 개의 직원 객체를 추출하고 이 데이터를 두 개의 해시 객체 $empObjHash1$empObjHash2에 추가했습니다. 그런 다음 두 직원 객체를 추가하여 $finalHash를 생성했습니다.

$finalHash를 출력하면 다음과 같습니다.

XML에서 해시 객체로 객체 추출

$finalHash를 보다 자세히 검사하기 위해 foreach 루프를 사용할 수 있습니다.

코드:

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

출력:

$finalHash를 자세히 검사하기 위해 foreach 루프를 사용하세요.

$finalHash는 XML에서 추출한 관련 데이터로 구성되었습니다.

해시를 JSON으로 변환

우리는 PowerShell 해시 $finalHash를 가지고 있으므로 ConvertTo-Json cmdlet을 사용하여 해시에서 JSON을 생성할 수 있습니다.

구문:

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

생성된 해시 $finalHash를 전달하여 JSON 문자열을 생성해 보겠습니다.

코드:

$finalHash | ConvertTo-Json

출력:

해시를 JSON으로 변환

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

PowerShell에서 XML을 JSON으로 변환하기 위해 ConvertTo-JsonConvertFrom-Xml Cmdlet 사용하기

PowerShell에서 XML 데이터를 JSON 형식으로 변환하는 것은 웹 API 또는 현대 웹 서비스와 인터페이스할 때 특히 흔한 요구 사항입니다. PowerShell은 ConvertTo-JsonConvertFrom-Xml cmdlet을 통해 이 작업을 단순화합니다.

구문:

  • Get-Content: 파일의 내용을 읽습니다.

    • -Path <String>: 파일의 경로를 지정합니다.
  • ConvertTo-Json: 객체를 JSON 형식의 문자열로 변환합니다.

    • -InputObject <Object>: 변환할 객체를 지정합니다.
    • -Depth <Int32>: 포함할 객체 계층의 깊이를 지정합니다.

예제

# 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

우리의 스크립트에서는 먼저 $xmlFilePath 변수를 사용하여 XML 파일의 경로를 지정합니다. Get-Content를 사용하여 이 파일의 내용을 $xmlContent 변수에 읽어옵니다.

이 내용은 [xml] 유형으로 형변환되어 구조화된 XML 객체($xmlObject)가 생성됩니다. 이 객체는 JSON 형식으로 변환하기 위해 ConvertTo-Json에 전달됩니다.

마지막으로 Write-Output을 사용하여 JSON 문자열을 출력합니다.

출력:

파워셸 XML을 JSON으로 변환 - 출력

결론

결론적으로, 이 가이드는 PowerShell을 사용하여 XML 문서를 JSON 문자열로 변환하는 실용적이고 효율적인 방법을 성공적으로 보여주었습니다. XML 데이터를 PowerShell 해시로 추출하는 방법과 ConvertFrom-Xml cmdlet을 활용하는 방법 두 가지를 보여 주며, 이 가이는 다양한 사용자 요구 및 시나리오에 맞춘 다재다능한 옵션을 제공합니다.

단계별 지침과 관련 코드 스니펫 및 출력이 결합되어 독자들이 개념을 쉽게 이해하고 실제 상황에서 이러한 방법을 적용할 수 있게 합니다. 데이터를 처리하고 변환하는 데 있어 PowerShell의 유연성과 강력함이 분명히 드러나며, XML 및 JSON 데이터 변환을 다루는 관리자와 개발자에게 필수적인 도구가 됩니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
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.

관련 문장 - PowerShell Convert