JMESPathノック
ノックせよという電波を受信した
基本のおさらい
以前書いた記事があるのでそちらを参考に。
JMESPathノック
Azure CLIを使っていて実際に使ったパターンを記載していこうかな、と。
もともとはTwitterで1000本ノックという電波を受信したことによる。
が、さすがに1000本を一気には無理なのでDone is better than perfect.の精神で最初は数が少なくても仕方がないと自分に言い聞かせることにした。
もし、「こんなパターンもよく使うよ!」的なのがあればTwitterでも他の連絡手段でもいいのでぜひ教えていただきたい。
元データ1
お題が増えたらデータは拡充するとして、なにごともまずはシンプルに。
無駄を削ぎ落し本質を見ることはいつだって大切。
[
{
"name": "foo",
"value": 100
},
{
"name": "bar",
"value": 200
},
{
"name": "baz",
"value": 300
},
{
"name": "qux",
"value": 100
}
]nameだけの配列
解答
$ echo $INPUT | jp "[*].name"
[
"foo",
"bar",
"baz",
"qux"
]nameがbazのvalue
解答
$ echo $INPUT | jp "[?name=='baz'].value"
[
300
]nameがuniqueであることが保証されているなら、以下で配列から値にできる。
$ echo $INPUT | jp "[?name=='baz'].value|[0]"
300valueが200のname
解答
数値をフィルタリングする際はto_number()を使わないとエラーが出るため注意。
$ echo $INPUT | jp -u "[?value==to_number('200')].name|[0]"
barbを含むnameの配列
解答
contains()はそれなりに使用頻度が高そう。自身を指定する場合は@を使う。プログラミングでいうとこのforeach文の各要素のイメージ。
$ echo $INPUT | jp "[?contains(@.name,'b')].name"
[
"bar",
"baz"
]なにかあれば追記
追記するつもりだけど、そこまで高度なクエリが必要にならないでござる。
