今回の記事では、PowerShell初心者向けとして、JSONファイルを読み込んでパースするコマンドを解説も交えて紹介していきます。
尚、当記事は、以前に作った以下の記事内のスクリプトで作成したJSONファイルを読み込みます。
よって、以前の記事の補足的な内容ですが、JSON形式のファイルであれば、どのようなJSONファイルでも同じようにパースできるため、別の記事として作成しています。
PowerShellでJSONファイルをパースするコマンド例と解説
当項では、JSONファイルを読み込んでパースするコマンドを、PowerShellにあまり馴染みのない方でもわかるように解説していきます。
PowerShellを起動
PowerShellをさわったことがない人でも扱えるように、今回の記事ではPowerShellの起動方法から説明しておきます。
Windows 10 の64bit版の場合は、スタートメニュー内のフォルダ「Windows PowerShell」を開くと、四つのPowerShellのプログラム名が並んでいます。
「Windows PowerShell」と「Windows PowerShell ISE」があり、さらにそれぞれ「(x86)」有りと無しがあります。
大まかな違いは以下です。
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」は渡されたデータを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」に代入しています。
処理の流れのイメージは以下です。
まず、①では「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も活用していただくことをおススメします。
今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう!