JSONは、読みやすく転送しやすいデータ構造を扱うための、ほぼ定番のテキストベースのフォーマットです。PowerShellを使っているなら、覚えておきたい2つの主要なコマンドレットがあります。それは と ですConvertFrom-Json。ConvertTo-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
これらはどれも、一度感覚をつかめばかなり強力ですが、確かに少し扱いにくい部分もあります。特にネストされたオブジェクトや奇妙なデータ形式を扱う場合はなおさらです。まずはシンプルなものから始めて、実験を恐れずに進めてください。