PowerShell で XML を JSON に変換する方法

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

この包括的なガイドは、XML ドキュメントを PowerShell を使用して JSON 形式の文字列に変換することについて掘り下げています。PowerShell は強力なスクリプト言語およびコマンドラインシェルです。XML および JSON 形式は、データ交換と保存において基本的なものであり、特に構成やデータ処理が重要な環境で特に重要です。

PowerShell は、その強力なコマンドレットのセットを使用して、この変換プロセスを簡素化します。このガイドでは、2つの主な方法を探ります。1つは XPath 選択ハッシュテーブル、および ConvertTo-Json の組み合わせを使用し、もう 1つは ConvertTo-JsonConvertFrom-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 ノード EmpIdEmpAge、および 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 が存在する場所です。各従業員オブジェクトごとに 3つのノードを取得する必要があるため、PowerShell で foreach が使用されています。

各ノードの XPath 式は以下のようになります。EmpID ノードには、XPath クエリ "//Employee//EmpId" を使用してアクセスできます。

EmpAge ノードには、XPath クエリ "//Employee//EmpIAge" を使用してアクセスできます。EmpDesignation ノードには、XPath クエリ "//Employee//EmpDesignation" を使用してアクセスできます。

参照変数 $empIds$empAges、および $empDesigs は、各 XML ノードの値の配列を含みます。これらの配列を PowerShell コンソールウィンドウに書き込みます。

PowerShell コンソールウィンドウで、それぞれの XML ノードの配列の値を書き込む

データを保持するための 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 を印刷すると、以下のようになります。

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 コマンドレットを使用してハッシュから 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-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 に変換 - 出力

結論

結論として、このガイドでは、PowerShell を使用して XML ドキュメントを JSON 文字列に変換するための実用的で効率的な方法を示しました。XML データを PowerShell ハッシュに抽出する方法と ConvertFrom-Xml コマンドレットを使用する方法の 2つの異なるアプローチを紹介することにより、さまざまなユーザーのニーズとシナリオに応じた柔軟なオプションを提供します。

段階的な指示と関連するコードスニペットおよび出力により、読者はこの概念をすぐに把握し、リアルワールドの状況でこれらの方法を適用することができます。データ形式の取り扱いや変換における PowerShell の柔軟性と力が明らかになり、XML と JSON データ変換を扱う管理者や開発者にとって欠かせないツールになります。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
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