enebularでは、データを変更する change ノードや、データを流し込むきっかけを作る inject ノードでJSONata式を使えます。このJSONataを使うと、ちょっとした計算やデータ加工が可能になるので、フロー作成時の制作の幅がグッと広がります。
試してみるフローをまず準備
まずは実際に試す【こちら】のフローをDiscover Flowから取り込んで準備しておきましょう。このフローをプロジェクトにインポートしておけば、みなさんすぐに試せます。
今回ご紹介するTips
ちょっとした計算(小数点切り上げ例)
たとえば、 100.1128912739
といった値を切りのいい整数にしたいときには・・・・・・
このようなフローで、小数点以下を切り上げて 101
にするような処理ができます。
こちらと同じように小数点まわり操作するものとして、
$floor(number)
- numbe 以下の最も近い整数値へ切り捨てた値を返す
$round(number)
- number の値を四捨五入した値を返す
といった関数もそろっています。
オブジェクトから特定の値を取得したい
たとえば、
{ "apple": "りんご", "banana": "バナナ", "orange": "オレンジ" }
という果物の名前が入ったオブジェクトがあるとして、bananaのインデックスを呼びたいとき、このようなフローで呼び出せます。
$lookup(payload,"banana")
とlookup関数を利用することで、bananaで絞り込めます。
flow共通変数で加算
フロー内で何かしらの動作をカウントしたいときには、
このようなフローで inject ノードを押してみると、 flow共通変数の count という値がどんどん加算されます。
デバッグ結果で上記のように加算された結果を見ることができます。
こちらの加算は、このchangeノードの中で行っています。
$flowContext("count") + 1
によって、flowContext関数で count を指定することで値が呼び出せて +1 でカウントが加算できます。
あとは、changeノードが値の代入ををflow共通変数に反映しなおすので加算が成立します。
もちろん、 function ノードを使うなど他のやり方もできますが、シンプルに行えるので便利です。
シャッフル
面白い関数として、配列の中をシャッフルしてくれる、おみくじのような仕組みに使えそうなものもあります。
このようなフローで、inject ノードで ["りんご","バナナ","オレンジ"]
という値を送ると、
このように、シャッフルされます。
change ノードで $shuffle(payload)
と JSONata を指定するとシャッフルされます。こんな短いコードで行ってくれるのがありがたいですね。
こちらと同じように配列周りを処理するものとして
$reverse(array)
- array の値を、逆順にした配列を返す
$average(array)
- 数値の配列 array の平均値を返す
$sort(array)
- array 内の値を並び変えた配列を返す
のような関数もそろっています。
JSONata 式で、ちょっと踏み込んだ計算や処理をして、つくる幅を広げてみましょう!
ということで、いくつかの JSONata Tips をご紹介しました。
もちろん、Function ノードでがっつり JavaScriptのコードを書くときは JavaScript プログラミング知識さえあれば、どこまでも複雑に計算や処理を行うことができます。ですが、そうしてしまうと、JavaScript プログラミング知識の差によって、ほかの人が編集するときに伝わりにくく修正しにくかったり、自分自身も数か月後に理解しにくい構造になってしまうときがあります。
そういうときに、JSONata を使って Function ノードで書くよりもシンプルに処理や計算ができれば、フローも見やすさを保ったまま、つくる幅が広げられますね。
JSONataは、このようにJSONata式エディタで書くことができます。
さらに、JSONata式エディタの中には、関数リファレンスがあり、
一つ一つの機能を確認しながら、試しに挿入できるので、ぜひやってみてください。