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

이 포괄적인 가이드는 강력한 스크립트 언어인 PowerShell을 사용하여 XML 문서를 JSON 형식의 문자열로 변환하는 방법을 자세히 설명합니다. XML 및 JSON 형식은 데이터 교환 및 저장에 필수적이며, 특히 구성 및 데이터 처리가 중요한 환경에서 그렇습니다.
PowerShell은 강력한 cmdlet 세트를 통해 이 변환 프로세스를 단순화합니다. 이 가이드는 두 가지 주요 방법을 탐구합니다: 첫 번째 방법은 XPath 선택
, 해시 테이블
, 및 ConvertTo-Json
의 조합을 포함하고, 두 번째 방법은 ConvertTo-Json
및 ConvertFrom-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 }
이 예제에서 -Path
는 employeeinfo.xml
이 위치한 경로입니다. 각 직원 객체당 세 개의 노드를 가져와야 하므로 PowerShell foreach
가 사용되었습니다.
각 노드에 대한 XPath
표현식은 다음과 같습니다. EmpID
노드는 XPath
쿼리 "//Employee//EmpId"
로 접근할 수 있습니다.
EmpAge
노드는 XPath
쿼리 "//Employee//EmpIAge"
로 접근할 수 있습니다. EmpDesignation
노드는 XPath
쿼리 "//Employee//EmpDesignation"
로 접근할 수 있습니다.
참조 변수 $empIds
, $empAges
, 및 $empDesigs
는 각 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
를 출력하면 다음과 같습니다.
$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
는 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
출력:
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-Json
및 ConvertFrom-Xml
Cmdlet 사용하기
PowerShell에서 XML 데이터를 JSON 형식으로 변환하는 것은 웹 API 또는 현대 웹 서비스와 인터페이스할 때 특히 흔한 요구 사항입니다. PowerShell은 ConvertTo-Json
및 ConvertFrom-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 문자열을 출력합니다.
출력:
결론
결론적으로, 이 가이드는 PowerShell을 사용하여 XML 문서를 JSON 문자열로 변환하는 실용적이고 효율적인 방법을 성공적으로 보여주었습니다. XML 데이터를 PowerShell 해시로 추출하는 방법과 ConvertFrom-Xml
cmdlet을 활용하는 방법 두 가지를 보여 주며, 이 가이는 다양한 사용자 요구 및 시나리오에 맞춘 다재다능한 옵션을 제공합니다.
단계별 지침과 관련 코드 스니펫 및 출력이 결합되어 독자들이 개념을 쉽게 이해하고 실제 상황에서 이러한 방법을 적용할 수 있게 합니다. 데이터를 처리하고 변환하는 데 있어 PowerShell의 유연성과 강력함이 분명히 드러나며, XML 및 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.