以下の内容はhttps://tech.guitarrapc.com/entry/2013/03/04/210313より取得しました。


PowerShellでJSONを触ってみる(続き)

前回の続きです。

PowerShellでJSONを触ってみる

前回頑張ってJSONを読み取れるFunctionを作ったのですが、PowerShell 3.0では標準コマンドレットでJSONが扱えました。 牟田口先生には感謝です。 ====

RestAPIからJSONを取得するコマンドレット

このコマンドレットで簡単完了です。

Invoke-RestMethod <uri>

ということで、今回のサンプルならこうです。

Invoke-RestMethod http://guitarrapc.azurewebsites.net/api/people

たったこの一行で、作ったファンクションと同じ結果を取得できるのだから…3.0いいね! 合わせて、JSONをPSObjectに変換せずJSON文字列のまま取得するにはこれで

Invoke-WebRequest <uri> | select -ExpandProperty Content

ということで、今回のサンプルならこうです。

Invoke-WebRequest http://guitarrapc.azurewebsites.net/api/people | select -ExpandProperty Content

これで、だだっと取得できます。

[{"Id":1,"Name":"量産型ぎたぱそ1号"},{"Id":2,"Name":"量産型ぎたぱそ2号"},{"Id":3,"Name":"量産型ぎたぱそ3号"},{"Id":4,"N......

PSObjectとJSONの相互変換

PSObjectとJSONの相互変換もコマンドレットでサポートされています。 PSObjectからJSONへの変換は以下のコマンドレットです。

ConvertTo-JSON

逆にJSONからPSObjectへの変換は以下のコマンドレットです。

ConvertFrom-JSON

PSObjectからJSONへの変換を試みる

例えば、Get-Processの結果を、JSONに出力してみましょう。

$process = Get-Process | select Id, ProcessName, StartTime, Handle, PM, NPM, Path
ConvertTo-JSON $process

抜粋結果です。

[
    {
        "Id":  3020,
        "ProcessName":  "atieclxx",
        "StartTime":  null,
        "Handle":  null,
        "PM":  1875968,
        "NPM":  11264,
        "Path":  null
    },
    {
        "Id":  856,
        "ProcessName":  "atiesrxx",
        "StartTime":  null,
        "Handle":  null,
        "PM":  827392,
        "NPM":  6480,
        "Path":  null
    },
    {
        "Id":  3904,
        "ProcessName":  "ZuneLauncher",
        "StartTime":  "\/Date(1362240332685)\/",
        "Handle":  7748,
        "PM":  1146880,
        "NPM":  7168,
        "Path":  "C:\\Program Files\\Zune\\ZuneLauncher.exe"
    }
]

JSONからPSObjectへの変換を試みる

逆に、JSONデータをPSObjectに変換することも簡単です。 先ほどJSONに変換したGet-Processの結果をPSObjectに再変換してみましょう。

$JSON = ConvertTo-JSON $process
ConvertFrom-JSON $JSON

抜粋結果です。

Id          : 3020
ProcessName : atieclxx
StartTime   :
Handle      :
PM          : 1875968
NPM         : 11264
Path        :

Id          : 856
ProcessName : atiesrxx
StartTime   :
Handle      :
PM          : 827392
NPM         : 6480
Path        :

Id          : 3904
ProcessName : ZuneLauncher
StartTime   : 2013/03/02 16:05:32
Handle      : 8176
PM          : 1146880
NPM         : 7168
Path        : C:\Program Files\Zune\ZuneLauncher.exe

まとめ

JSONもこわくない。Format-List形式とJSONって良く似てますね。

参考サイト




以上の内容はhttps://tech.guitarrapc.com/entry/2013/03/04/210313より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14