PowerShell で XML を JSON に変換する方法
-
PowerShell で XML を JSON に変換するための
XPath 選択
、ハッシュテーブル
、およびConvertTo-Json
の使用 -
PowerShell で XML を JSON に変換するための
ConvertTo-Json
およびConvertFrom-Xml
コマンドレットの使用 - 結論

この包括的なガイドは、XML ドキュメントを PowerShell を使用して JSON 形式の文字列に変換することについて掘り下げています。PowerShell は強力なスクリプト言語およびコマンドラインシェルです。XML および JSON 形式は、データ交換と保存において基本的なものであり、特に構成やデータ処理が重要な環境で特に重要です。
PowerShell は、その強力なコマンドレットのセットを使用して、この変換プロセスを簡素化します。このガイドでは、2つの主な方法を探ります。1つは XPath 選択
、ハッシュテーブル
、および ConvertTo-Json
の組み合わせを使用し、もう 1つは ConvertTo-Json
と ConvertFrom-Xml
コマンドレットを使用します。
このガイドは、XML ドキュメントのキーと値にアクセスすることから始まり、データを保持するための PowerShell ハッシュを構築し、最終的にハッシュを JSON に変換するという段階的なアプローチを提供します。各方法は詳細な例と構文を通じて説明されており、関連するプロセスを明確に理解できるようになっています。
PowerShell で XML を JSON に変換するための XPath 選択
、ハッシュテーブル
、および ConvertTo-Json
の使用
XML ドキュメントのキーと値にアクセス
PowerShell は、Select-Xml
コマンドレットを使用して 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
コマンドレットを使用して 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
が存在する場所です。各従業員オブジェクトごとに 3つのノードを取得する必要があるため、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)
デモの目的で XML から 2つの従業員オブジェクトを抽出し、それらのデータを 2つのハッシュオブジェクト $empObjHash1
と $empObjHash2
にプッシュしました。次に、2つの従業員オブジェクトをプッシュすることによって $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
コマンドレットを使用してハッシュから 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
コマンドレットの使用
PowerShell では、XML から JSON 形式へのデータ変換は一般的な要件であり、特に Web API や現代の Web サービスとのインターフェース時に重要です。PowerShell は、ConvertTo-Json
および ConvertFrom-Xml
コマンドレットを使用してこのタスクを簡素化します。
構文:
-
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
)が作成されます。このオブジェクトは ConvertTo-Json
に渡され、JSON 形式への変換を行います。
最後に、Write-Output
を使用して JSON 文字列を印刷します。
出力:
結論
結論として、このガイドでは、PowerShell を使用して XML ドキュメントを JSON 文字列に変換するための実用的で効率的な方法を示しました。XML データを PowerShell ハッシュに抽出する方法と ConvertFrom-Xml
コマンドレットを使用する方法の 2つの異なるアプローチを紹介することにより、さまざまなユーザーのニーズとシナリオに応じた柔軟なオプションを提供します。
段階的な指示と関連するコードスニペットおよび出力により、読者はこの概念をすぐに把握し、リアルワールドの状況でこれらの方法を適用することができます。データ形式の取り扱いや変換における 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.