【PowerShell入門】PowerShellでJSONファイルを読み込んでパース

Tips
スポンサーリンク

今回の記事では、PowerShell初心者向けとして、JSONファイルを読み込んでパースするコマンドを解説も交えて紹介していきます。

尚、当記事は、以前に作った以下の記事内のスクリプトで作成したJSONファイルを読み込みます。

よって、以前の記事の補足的な内容ですが、JSON形式のファイルであれば、どのようなJSONファイルでも同じようにパースできるため、別の記事として作成しています。
 
 

PowerShellでJSONファイルをパースするコマンド例と解説

当項では、JSONファイルを読み込んでパースするコマンドを、PowerShellにあまり馴染みのない方でもわかるように解説していきます。
 

PowerShellを起動

PowerShellをさわったことがない人でも扱えるように、今回の記事ではPowerShellの起動方法から説明しておきます。

Windows 10 の64bit版の場合は、スタートメニュー内のフォルダ「Windows PowerShell」を開くと、四つのPowerShellのプログラム名が並んでいます。
Windows PowerShell」と「Windows PowerShell ISE」があり、さらにそれぞれ「(x86)」有りと無しがあります。

PowerShellの起動方法

大まかな違いは以下です。

Windows PowerShell PowerShellの実行環境であり、デバッグ等はできません。
Windows PowerShell ISE PowerShellの統合開発環境であり、コマンド実行やデバッグができます。
x86無しは64bit版、x86有りは32bit版。通常はx86無しを使用する。

できることやできないことはそれぞれ異なるため、本来は用途によって使い分ける必要がありますが、今回紹介するコマンドを実行するだけであれば、どちらを起動していただいても結構です。
「Windows PowerShell ISE」であれば入力補完が表示されるため、わかりやすいかも知れません。
 

今回の記事で使用するJSONファイルのデータ構造や前提条件

今回の読み込みをするJSONファイルのデータ構造は以下のようになっている前提です。

{
    "hardware_assets": [
        {
            "hardware_asset_id": "1:1:1",
            "submgr_no": 1,
            "client_no": 1,
            "group_id": "1:1",
            "group_no": 1,
            "client_type": 6,
            "full_group_name": "テストグループ",
            "client_name": "TEST-PC01",
               ※以下省略
                 ・
                 ・
                 ・

今回の例で使用するJSONのデータ階層はキーによって2階層、又は3階層になっています。
こちらは、実際に読み込むJSONファイルのデータ構造に合わせて、コマンド内容を書き換えてください。

また、読み込み対象のJSON形式のファイルは、Cドライブ直下に置かれており、ファイル名は「result.json」となっている想定です。
こちらも必要によってご自身の環境で読み替えてください。

 

JSONをパースするコマンド例

PowerShellを起動し、以下のコマンドを実行します。

$jsondata = Get-Content -Path C:\result.json | ConvertFrom-Json

このコマンドを実行することで、JSONファイルパス「C:\result.json」をPowerShellに取り込み、変数「$jsondata」にJSONオブジェクトのデータが格納されます。

今回使用したコマンドレット「Get-Content」と「ConvertFrom-Json」の詳しい説明は以下のMicrosoft公式のドキュメントをご確認ください。

Get-Content
ConvertFrom-Json

簡単にそれぞれのコマンドレットを説明すると、「Get-Content」はテキスト形式のファイル(バイナリデータも可能)を読み込みます。
ConvertFrom-Json」は渡されたデータをJSON形式のオブジェクトに変換します。
※逆向きの「ConvertTo-Json」もあるので間違えないように。
また、PowerShellでは、文字列の先頭に「$」を付与することで「変数」になります。

上記のコマンドを実行したことで、変数「$jsondata」にはJSONオブジェクトに変換されたデータが格納されます。
後は、このJSONオブジェクトの変数に対して必要な操作をしていきます。

例えばJSONデータ内のキー「client_name」を取得したい場合は、以下のコマンドを入力することで、JSONファイル内の「client_name」の値を取り出して一覧表示できます。

$jsondata.hardware_assets.client_name

 

紹介したコマンドの解説

前述した以下のコマンドを解説していきます。

$jsondata = Get-Content -Path C:\result.json | ConvertFrom-Json

このコマンドは、主に二つのコマンドが順に実行され、その結果を変数「$jsondata」に代入しています。

処理の流れのイメージは以下です。

PowerShellでJSONをパースする解説

まず、①では「Get-Content」コマンドレットを使用して、JSONファイルを読み込みます。
その後ろの「 | 」は「パイプライン演算子」と呼び、前の処理結果を後ろの処理に渡します。

よって、①で読み込んだJSONファイル(ただのテキストデータ)を②の「ConvertFrom-Json」コマンドレットに渡すことで、PowerShellのJSONオブジェクトとして変換します。
その変換結果を③の変数「$jsondata」に代入しています。

処理の結果をパイプライン演算子で繋ぐことで、「JSONファイルの読み込み」→「JSONオブジェクトへの変換」→「変数への代入」の一連の処理が1行で実行できます。

この処理を2行に分けた場合は以下のようになります。

  $textdata = Get-Content -Path C:\result.json
  $jsondata = $textdata | ConvertFrom-Json

1行目では、いったんJSONファイルを読み込んで、変数「$textdata」に入れる。
※この時点では、変数「$textdata」はただの一塊のテキストデータであり、JSONオブジェクトではない。

2行目で、変数「$textdata」をコマンドレット「ConvertFrom-Json」に渡してJSONオブジェクトに変換し、その変換結果を変数「$jsondata」に入れる。

敢えて処理を分けると上記のような処理になります。
 

最後に

今回は、PowerShell初心者向けの記事として、PowerShellでJSONファイルを読み込んでパースする処理を簡単に紹介致しました。

PowerShellは、今回紹介したようにPowerShellのプロンプトを起動してコマンドやコードを入力して実行することもできますし、テキストファイルにPowerShellのコマンドやコードを記述して、拡張子を「ps1」と変更して保存することで、DOSコマンドを介してそのps1ファイルを自動実行させるようなことも可能です。

JSONファイルのパース処理自体は色々な方法がありますが、PowerShellであればWindows標準で実行できます。
また、PowerShellを使いこなすことで、非常に高度なバッチ処理などのプログラムが組めます。

是非今回の記事を参考に、PowerShellも活用していただくことをおススメします。

今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう!

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