JMESPathはJSONのquery language。
作成者はJames Saryerwinnieさんで、jmespathの呼び方は下記の通り"James Path"らしい。
JSONのクエリ言語ではありますが、この構文が。
aws-cli
の出力を整形してくれる--query
オプションがJMESPathだったり。
Azure CLI
の出力を整形してくれる--query
オプションがJMESPathだったり。
ansible
のフィルタjson_query
がJMESPathだったり。
などで採用されており、ここらへんをさわったことがあれば実はJMESPathを利用しているなんて事もあるかと思います。
AWS CLI 出力をフィルタリングする
JMESPath クエリを使用して Azure CLI コマンドの出力に対してクエリを実行する方法
Selecting JSON data: JSON queries
各種ツールで出力を整形してくれるので、ある程度使えると便利な構文かと思います。
余談
aws-cliでJMESPathが使えるようになったのはv1.2.0かららしい。
ドキュメントとか各種サイト
JMESPath
github jmespath
James Saryerwinnie
JMESPathについて
JMESPath Tutorial
JMESPath Examples
公式サイトのチュートリアスとサンプルが充実しているので、基本的にはこちらをさわって見るのが早いと思います。
ブラウザ上で実際にJMESPathを入力して結果がどうなるか確認しながら学ぶことができます。
だいたい感覚をつかみつつ、仕様を読みつつ。
各種ライブラリ
JMESPathでは各種言語で利用できるライブラリだったり、コマンド(jp)だったりターミナル(jpterm)が用意されています。
あと公式のライブラリページには記載されていませんが。
VSCode向けの拡張機能もあったりします。
JMESPath for Visual Studio Code
jmespath
Windowsに jp コマンドをインストールしてPowerShellから実行してみる
インストールのところを参照すると、リリースページにWindows, Linux, Mac, FreeBSD用のバイナリがあるとのことなので、今回はこちらからダウンロードしてpathを通しておきます。
# jp-windows-amd64をダウンロードして~/bin/jp/jp.exe というパスに保存
Invoke-WebRequest -uri https://github.com/jmespath/jp/releases/latest/download/jp-windows-amd64 -OutFile (New-Item ~/bin/jp/jp.exe -Force)
# 一時的にPATHに追加(永続的に追加する場合は別途環境変数PATHに追加して下さい)
$env:path+=";$env:USERPROFILE\bin\jp\"
jp --version
jpコマンドでパースしてみる
今回は 下記のようなJsonをjpコマンドで整形してみます。
{
"locations": [
{"name": "Seattle", "state": "WA"},
{"name": "New York", "state": "NY"},
{"name": "Bellevue", "state": "WA"},
{"name": "Olympia", "state": "WA"}
]
}'
$sampleJson='{
"locations": [
{"name": "Seattle", "state": "WA"},
{"name": "New York", "state": "NY"},
{"name": "Bellevue", "state": "WA"},
{"name": "Olympia", "state": "WA"}
]
}'
# stateがWAの物を抽出して項目nameを出力
$sampleJson | jp "locations[?state=='WA'].name"
# stateがWAの物を抽出して'hello'という文字列と項目nameを出力
$sampleJson | jp "locations[?state=='WA'].['hello',name]"
# stateがWAの物を抽出 joinで 'hello'という文字列と項目nameをスペース(' ')でjoin
$sampleJson | jp "locations[?state=='WA'].join(' ',['hello',name])"
総評
個人的にはaws-cli
で出力を整形する際は、--query
オプション(JMESPath)でほぼほぼ整形してしまいます。
やりすぎるとJMESPath芸みたいな色が出てはしまいますが……
aws-cli
コマンド一発で出力の整形までやってしまえるとそれはそれで便利です。