JMESPathノック
ノックせよという電波を受信した
基本のおさらい
以前書いた記事があるのでそちらを参考に。
JMESPathノック
Azure CLIを使っていて実際に使ったパターンを記載していこうかな、と。
もともとはTwitterで1000本ノックという電波を受信したことによる。
JMESPath 1000本ノック
— よこち(yokochi) (@akira6592) May 14, 2021
が、さすがに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]"
300
value
が200
のname
解答
数値をフィルタリングする際はto_number()
を使わないとエラーが出るため注意。
$ echo $INPUT | jp -u "[?value==to_number('200')].name|[0]"
bar
b
を含むname
の配列
解答
contains()
はそれなりに使用頻 度が高そう。自身を指定する場合は@
を使う。プログラミングでいうとこのforeach
文の各要素のイメージ。
$ echo $INPUT | jp "[?contains(@.name,'b')].name"
[
"bar",
"baz"
]
なにかあれば追記
追記するつもりだけど、そこまで高度なクエリが必要にならないでござる。