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
の中のAge
やEmail
も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-File
やSet-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の相性は抜群です。ぜひ今回の内容を参考に、より実用的なスクリプト作成に役立ててください。