PowerShellでJSONを扱う基本:ConvertFrom-Jsonの使い方と活用例

PowerShellは、Windowsの自動化やスクリプト作成に欠かせないツールです。その中でも、JSON形式のデータを扱う場面は多く、Web APIのレスポンス処理や設定ファイルの読み込みなどで頻繁に利用されます。PowerShellではConvertFrom-Jsonコマンドを使うことで、JSON文字列をPowerShellオブジェクトに簡単に変換できます。本記事では、ConvertFrom-Jsonの基本的な使い方から、実践的な活用例までを詳しく解説します。JSONデータを効率よく扱いたい方は、ぜひ参考にしてください。


ConvertFrom-Jsonとは?

ConvertFrom-Jsonは、JSON形式の文字列をPowerShellのカスタムオブジェクトへと変換するためのコマンドレットです。PowerShell 3.0以降で利用可能で、JSONを扱う上で欠かせない基本的なコマンドの一つです。

基本構文

ConvertFrom-Json [-InputObject] <string>

このコマンドは、JSON文字列を受け取って、それをPowerShellオブジェクトに変換します。変換されたオブジェクトは、通常のPowerShellコマンドで自由に操作できます。


基本的な使い方

例1:シンプルなJSONの変換

まずは、単純なJSONオブジェクトを扱ってみましょう。

$json = '{
"name": "Taro",
"age": 30,
"isAdmin": true
}'

$obj = $json | ConvertFrom-Json
$obj.name # "Taro"
$obj.age # 30
$obj.isAdmin # True

このように、JSONのキーはオブジェクトのプロパティとしてアクセスできます。


ネストされたJSONオブジェクトの変換

JSONではオブジェクトの中に別のオブジェクトや配列が含まれていることがあります。ConvertFrom-Jsonは、こうしたネストされた構造も適切にオブジェクトとして変換してくれます。

例2:ネストされたオブジェクト

$json = '{
"user": {
"name": "Hanako",
"email": "hanako@example.com"
},
"active": true
}'

$obj = $json | ConvertFrom-Json
$obj.user.name # "Hanako"
$obj.user.email # "hanako@example.com"
$obj.active # True

$obj.userは、別のオブジェクトとして扱うことができます。


配列を含むJSONの変換

JSONには配列形式のデータもよく登場します。PowerShellでは、これもリストとして扱えるため、繰り返し処理などにも簡単に対応できます。

例3:配列の処理

$json = '[
{ "id": 1, "name": "Apple" },
{ "id": 2, "name": "Banana" },
{ "id": 3, "name": "Cherry" }
]'

$items = $json | ConvertFrom-Json

foreach ($item in $items) {
Write-Output "ID: $($item.id), Name: $($item.name)"
}

このように、複数のデータを1件ずつ取り出して処理することも簡単です。


APIレスポンスの処理に活用する

PowerShellでAPIにアクセスする際、多くのレスポンスはJSON形式で返されます。Invoke-RestMethodと組み合わせて使うことで、ConvertFrom-Jsonを意識せずとも自然にJSONを扱えます。

例4:APIからJSONを取得して処理

$response = Invoke-RestMethod -Uri "https://api.example.com/users"
$response[0].name # 最初のユーザーの名前を取得

この場合、Invoke-RestMethodが内部でConvertFrom-Jsonを使っており、返されるのはすでにオブジェクトです。ただし、Invoke-WebRequestを使った場合は、レスポンスボディを手動で変換する必要があります。

$response = Invoke-WebRequest -Uri "https://api.example.com/users"
$data = $response.Content | ConvertFrom-Json
$data[0].name

変換できないケースと注意点

ConvertFrom-Jsonは便利ですが、いくつか注意すべき点もあります。

1. 無効なJSON形式はエラーになる

$json = '{ name: "Taro" }'
$obj = $json | ConvertFrom-Json # これはエラーになる(キーがダブルクオートで囲まれていない)

JSONは厳密な構文ルールがあり、キーや値はダブルクオートで囲む必要があります。

2. 行数制限(デフォルトで1024行まで)

PowerShellのバージョンによっては、長大なJSONを処理する際にエラーになることがあります。PowerShell 7以降ではこの制限が緩和されていますが、古いバージョンでは以下のように制限を回避する必要があります。

$json = Get-Content .\largefile.json -Raw
$data = $json | ConvertFrom-Json

-Rawオプションを付けることで、ファイル全体を1つの文字列として読み込みます。


JSONとオブジェクトの相互変換(ConvertTo-Jsonとの違い)

ConvertFrom-JsonはJSON文字列をオブジェクトに変換しますが、逆にオブジェクトをJSONに変換するにはConvertTo-Jsonを使います。

$obj = @{
name = "Ken"
age = 25
}
$json = $obj | ConvertTo-Json

このように、ConvertTo-JsonConvertFrom-Jsonは対になる存在で、相互変換が可能です。


まとめ

ConvertFrom-Jsonは、PowerShellにおいてJSONデータを扱うための基礎中の基礎ともいえるコマンドレットです。シンプルなキーと値のペアだけでなく、ネスト構造や配列なども自然に扱えるため、現代のAPIや構成ファイルをスクリプトで処理するうえで欠かせない存在です。

また、Invoke-RestMethodと組み合わせれば、Web APIのレスポンス処理も非常にスムーズになります。もしPowerShellでJSONを扱う機会があるなら、ConvertFrom-Jsonの使い方をしっかりと理解しておくことは大きな武器になります。

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