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でプロファイル定義を見ることも可能だ。
オブジェクトの中身が同じ形式のオブジェクトの繰り返しなら、CSVファイルにすることも可能だ。読み込んだJSONが$xに入っているとしたら、
$x.keybindings | ConvertTo-Csv
とすることで、CSVファイルに変換できる。こうした処理を使うことで、JSONファイルの一部を取り出して、残りはExcelで処理といったことも可能だ。筆者は、Windows Terminalのdefault.jsonからキー割り当てだけを取り出して、加工したのちExcelに読み込んで、キー割り当て表を作っている。
公開当初より、内容を一部訂正しております。(12/7 18:30)

この連載の記事
-
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う - この連載の一覧へ