このページの本文へ

前へ 1 2 次へ

Windows Info 第253回

Windows 10でJSONを扱う

2020年12月06日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

Windows 10だとPowerShellで手軽に扱える

 JSONは、今やExcelでも扱えるのだが、世間にあるJSONにはCSVで表現できるような比較的単純な構造を繰り返しているものもあれば、構造が入り組んでいてCSVや表などの表現にはなじまないものもある。

 こうした繰り返し構造を部分的にしか持たないようなJSONは、Excelで処理するのは面倒で、かえって手間がかかってしまう(Microsoft 365版のExcelにはJSONの読み込み機能がある)。ここでは、WindowsのPowerShellでJSONを簡単に扱う方法を解説する。

 ここではJSONは、ファイル形式になっているものと仮定する。とりあえずはサンプルとして、Windows Terminalの定義ファイル(defualt.json)や設定ファイル(settings.json)を使う。

 この2つのファイルは、Windows Terminalを起動して、メニューの「設定」またはAltキーを押しながらメニューの「設定」を選べば、自動的に生成される。ちょっと見てみるとわかるが、かなり複雑な構造をしている。このあたりについては、以下の過去記事を参考にしていただきたい。

●Windows Terminalのカスタマイズを研究【キーボード編】
 https://ascii.jp/elem/000/004/016/4016864/

●正式版が登場したWindows Terminalをカスタマイズする
 https://ascii.jp/elem/000/004/016/4016188/

●Windows 10の新コンソール、Windows Terminalが完成直前のv0.11に
 https://ascii.jp/elem/000/004/010/4010939/

 PowerShellでファイルを読み込むには、Get-Contentコマンドを使う。これでJSONファイルを読み込むことはできる。

Get-Content -Path ファイルパス

とする。ただし、このままでは単にファイルを読んで表示して終わりである。

 JSONファイルをPowerShell内のオブジェクトに変換して読み込むには、「ConvertFrom-JSON」コマンドを使う。つまり、以下のようにして2つのコマンドをパイプ記号「|」で接続する。すると、最初のコマンドの出力(ファイルの内容)が次のコマンドに送られて処理される。

Get-Content -Path ファイルパス | ConvertFrom-JSON

とすれば、PowerShellがJSONファイルを読み込んでくれる。

Windowsに付属のPowerShell Ver.5.xは、JSONスキーマに対応してないので、注釈を含むJSONファイルを読み込むとエラーになってしまう。Where-Objectで注釈を抜くと読み込みが可能

 ただし、Windows 10付属のPowerShell(Ver.5.x)のJSON機能は、JSONスキーマやJSONCには対応していない。Ver.7.xなら注釈はエラーにならないが、Ver.5.xでは、エラーになってしまう。このときには、Where-Objectを使って注釈を取り除く。具体的には、

$x=Get-Content -Path .\settings.json | Where-Object{ $_ -notmatch "^\s*//.*$" } | ConvertFrom-Json

のようにする(繰り返しが面倒なので変数$xに結果を格納している)。Where-Objectの部分は、正規表現「^\s*//.*$」で注釈のパターンを指定し、それに一致しない(-notmatch)ものだけを通過させている。

 こうした問題を考えると、PowerShell 7.xをインストールしておいたほうがいいかもしれない。ちなみにWindows 10に標準で含まれるPowerShellは現行の5.xのままで開発は停止、今後はgithubで公開されているPowerShell(6.xまではPowerShell Coreと呼んでいたが7.xからPowerShellという名前になった)のほうで開発が進められるということだ。

●github PowerShell/PowerShell Release v7.1.0
 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.0

 $xに結果が入っているなら、以下の画面のように$x.keybindingsでsettings.json内の「keybindings」オブジェクトの中身を表示できる。あるいは、$x.profiles.listでプロファイル定義を見ることも可能だ。

ConvertFrom-JSONでJSONデータをPowerShellのオブジェクトに変換すると、オブジェクトの名前で値を取り出せるようになる

 オブジェクトの中身が同じ形式のオブジェクトの繰り返しなら、CSVファイルにすることも可能だ。読み込んだJSONが$xに入っているとしたら、

$x.keybindings | ConvertTo-Csv

とすることで、CSVファイルに変換できる。こうした処理を使うことで、JSONファイルの一部を取り出して、残りはExcelで処理といったことも可能だ。筆者は、Windows Terminalのdefault.jsonからキー割り当てだけを取り出して、加工したのちExcelに読み込んで、キー割り当て表を作っている。

 公開当初より、内容を一部訂正しております。(12/7 18:30)

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン