PowerShellでオブジェクトをJSONに変換する方法:ConvertTo-Jsonコマンドの基本と活用術

PowerShellでスクリプトを作成していると、外部システムとのデータ連携やログの保存などでJSON形式が必要になる場面が増えています。そんなときに便利なのがConvertTo-Jsonコマンドです。このコマンドを使えば、PowerShellのオブジェクトを簡単にJSON形式に変換でき、他のアプリケーションやAPIとスムーズに連携できます。本記事では、ConvertTo-Jsonの基本的な使い方から、実用的な応用方法まで詳しく解説します。PowerShellを使いこなしたい方やJSON形式に苦手意識がある方にこそ役立つ内容です。


ConvertTo-Jsonとは?

ConvertTo-Jsonは、PowerShellのオブジェクトをJSON形式に変換するためのコマンドレットです。構造化されたデータをそのままJSONとして出力するため、外部システムとの連携、ファイル保存、API通信など多くの場面で活用されます。

PowerShellではオブジェクトが標準的に使われるため、テーブルやリストのようなデータもこのコマンド一つで簡単にJSONへ変換できます。これにより、プログラム同士のやりとりがしやすくなります。


基本的な使い方

まずは最もシンプルな使い方を紹介します。

Get-Process | Select-Object -First 1 | ConvertTo-Json

このコマンドは、現在実行中のプロセスのうち最初の1件を取得し、それをJSON形式で出力します。出力結果は以下のようになります:

{
"Handles": 1352,
"Name": "explorer",
"Id": 4560,
"PriorityClass": "Normal",
...
}

このように、PowerShellのオブジェクトがキーと値のペアに変換され、見慣れたJSON形式になります。


階層構造とDepthパラメータ

PowerShellのオブジェクトは入れ子構造を持つことがよくあります。ConvertTo-Jsonはデフォルトで2階層までしか出力しないため、必要に応じて-Depthパラメータを指定する必要があります。

$object = @{
Name = "User1"
Profile = @{
Age = 30
Email = "user1@example.com"
}
}

$object | ConvertTo-Json -Depth 3

-Depthを指定しないと、Profileの中身が省略されてしまうことがあります。この例では、3階層目まで展開されるため、Profileの中のAgeEmailもJSONに変換されます。


配列やリストのJSON変換

複数のデータを含む配列もConvertTo-Jsonで簡単に変換できます。

$users = @(
@{ Name = "Alice"; Age = 28 },
@{ Name = "Bob"; Age = 35 }
)

$users | ConvertTo-Json -Depth 2

出力は以下のようになります:

[
{
"Name": "Alice",
"Age": 28
},
{
"Name": "Bob",
"Age": 35
}
]

この形式は、Web APIなどでよく使われる標準的な配列形式のJSONです。


JSONファイルとして保存する

変換したJSONをファイルに保存したい場合は、Out-FileSet-Contentと組み合わせます。

$data = @{ Server = "web01"; Status = "Running" }
$data | ConvertTo-Json | Out-File "server_status.json"

このコマンドでserver_status.jsonというファイルが作成され、中身はJSON形式で記録されます。ログ用途や構成ファイルの出力に便利です。


実用例:APIに送信するデータの整形

多くのWeb APIは、データをJSONで送信することを求めています。以下のようにして、JSONを作成しHTTPリクエストのボディに使用できます。

$body = @{
username = "admin"
password = "P@ssw0rd"
} | ConvertTo-Json

Invoke-RestMethod -Uri "https://example.com/api/login" `
-Method Post `
-Body $body `
-ContentType "application/json"

このように、APIと連携する際にもConvertTo-Jsonは不可欠です。


注意点:文字列のエンコードや特殊文字

ConvertTo-Jsonで注意が必要なのが、文字列のエンコードや特殊文字の扱いです。例えば、ダブルクォーテーションや改行などがエスケープされます。

$log = @{ Message = "Hello \"World\"\nNew line" }
$log | ConvertTo-Json

出力は以下のようになります:

{
"Message": "Hello \"World\"\nNew line"
}

このように、JSONの仕様に従って文字が変換される点を理解しておく必要があります。


JSONからオブジェクトに戻す:ConvertFrom-Json

ConvertTo-Jsonで変換したデータは、逆にConvertFrom-Jsonを使って元のオブジェクトに戻すことができます。

$json = '{"Name":"Alice","Age":28}'
$object = $json | ConvertFrom-Json
$object.Name # => Alice

このペアのコマンドを覚えておくと、ファイルやAPIからのデータ処理がとてもスムーズになります。


まとめ

ConvertTo-Jsonは、PowerShellでJSON形式のデータを扱う上で欠かせないコマンドレットです。オブジェクトをそのままJSONに変換できるため、外部とのデータ交換、ログ記録、API連携などあらゆる場面で活用できます。基本的な使い方に加えて、-Depthパラメータの理解や配列処理、ファイル保存などの応用も知っておくと非常に便利です。

PowerShellとJSONの相性は抜群です。ぜひ今回の内容を参考に、より実用的なスクリプト作成に役立ててください。

タイトルとURLをコピーしました