PowerShell を使用して JSON オブジェクトを読み取り、変更、解析する方法

JSONは、読みやすく転送しやすいデータ構造を扱うための、ほぼ定番のテキストベースのフォーマットです。PowerShellを使っているなら、覚えておきたい2つの主要なコマンドレットがあります。それは と ですConvertFrom-JsonConvertTo-JsonこれらはJSONデータの作成、読み取り、変更、そしてファイルへの保存に非常に便利です。少し奇妙に思えますが、一度コツをつかんでしまえば、とても簡単です。

JSONのデータはキーと値のペアとして保存され、互いにネストすることができます。例えば、JSONデータを作成してどこかに保存したい場合、まずPowerShellオブジェクトを作成します。例えば、次のようになります。

$obj = @{ Name = "Henry" Roles = @{ AD = "Admin" SQL = "Report" } "Company" = "woshub" } 

これは基本的にPowerShellのミニデータベースです。そこからこのオブジェクトをJSONに変換し、ドライブ上のファイルに保存します。

$json = $obj | ConvertTo-Json Set-Content -Path C:\PS\userroles.json -Value $json 

正しい順序を守ることが重要です。先ほどのスニペットでは、コマンドの組み合わせがおかしかったようです。ある設定ではうまくいきましたが、別の設定では…うまくいきませんでした。そのため、必ず最初に変換してからファイルに書き込んでください。また、共有いただいたコマンドにはタイプミスがあります。正しくは:

$json = $obj | ConvertTo-Json Set-Content -Path C:\PS\userroles.json -Value $json 

さて、その JSON を PowerShell に読み込みたい場合は、次のようにします。

$json = Get-Content -Path C:\PS\userroles.json -Raw | ConvertFrom-Json 

JSONプロパティの操作は非常に簡単です。以下のコマンドですべてのプロパティをリストするだけです。

$json | Format-List 

または、SQL ロールなどの特定のプロパティの値が必要な場合は、次のようにします。

$json. Roles. SQL 

新しいプロパティ(メールアドレスなど)を追加する必要がある場合は、Add-Memberを使用できます。ただし、特に複雑なオブジェクトの場合、構文が少し複雑になる場合があることに注意してください。例:

$json | Add-Member -MemberType NoteProperty -Name "Email" -Value "[email protected]"

注: PowerShellオブジェクトとJSONは全く同じではないことに注意してください。場合によっては、相互に変換する必要があるかもしれません。例えば、プロパティを変更する場合は、次のようにします。

$json. Roles. SQL = 'Admin' $json | ConvertTo-Json | Set-Content -Path C:\PS\userroles.json 

「メール」のようなプロパティを削除するには、次のようにします。

$json. PSObject. Properties. Remove("Email") 

JSONを返すWeb APIからデータを取得する場合は、Invoke-WebRequestコマンドレットが便利です。例えば、GoogleのDNS結果をJSONに変換するには、次のようにします。

$site = "woshub.com" $rawresp = Invoke-WebRequest "https://dns.google/resolve?name=$site&type=A" $rawjson = ConvertFrom-Json -InputObject $rawresp. Content $dnsAnswers = $rawjson. Answer. Data 

これらはどれも、一度感覚をつかめばかなり強力ですが、確かに少し扱いに​​くい部分もあります。特にネストされたオブジェクトや奇妙なデータ形式を扱う場合はなおさらです。まずはシンプルなものから始めて、実験を恐れずに進めてください。