JMESPath

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"
]

namebazvalue

解答
$ echo $INPUT | jp "[?name=='baz'].value"
[
  300
]

nameがuniqueであることが保証されているなら、以下で配列から値にできる。

$ echo $INPUT | jp "[?name=='baz'].value|[0]"
300

value200name

解答

数値をフィルタリングする際は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"
]

なにかあれば追記

追記するつもりだけど、そこまで高度なクエリが必要にならないでござる。