enebular で使える JSONata 式の便利 Tips

enebularでは、データを変更する change ノードや、データを流し込むきっかけを作る inject ノードでJSONata式を使えます。このJSONataを使うと、ちょっとした計算やデータ加工が可能になるので、フロー作成時の制作の幅がグッと広がります。

試してみるフローをまず準備

まずは実際に試す【こちら】のフローをDiscover Flowから取り込んで準備しておきましょう。このフローをプロジェクトにインポートしておけば、みなさんすぐに試せます。

image

 


今回ご紹介するTips

 


ちょっとした計算(小数点切り上げ例)

たとえば、 100.1128912739 といった値を切りのいい整数にしたいときには・・・・・・

image

このようなフローで、小数点以下を切り上げて 101 にするような処理ができます。

image

こちらと同じように小数点まわり操作するものとして、

  • $floor(number)
  • numbe 以下の最も近い整数値へ切り捨てた値を返す
  • $round(number)
  • number の値を四捨五入した値を返す

といった関数もそろっています。

 


オブジェクトから特定の値を取得したい

たとえば、

{
"apple": "りんご",
"banana": "バナナ",
"orange": "オレンジ"
}

という果物の名前が入ったオブジェクトがあるとして、bananaのインデックスを呼びたいとき、このようなフローで呼び出せます。

image

$lookup(payload,"banana") とlookup関数を利用することで、bananaで絞り込めます。

 


flow共通変数で加算

フロー内で何かしらの動作をカウントしたいときには、

image

このようなフローで inject ノードを押してみると、 flow共通変数の count という値がどんどん加算されます。

image

デバッグ結果で上記のように加算された結果を見ることができます。

image

こちらの加算は、このchangeノードの中で行っています。

image

$flowContext("count") + 1 によって、flowContext関数で count を指定することで値が呼び出せて +1 でカウントが加算できます。

あとは、changeノードが値の代入ををflow共通変数に反映しなおすので加算が成立します。

もちろん、 function ノードを使うなど他のやり方もできますが、シンプルに行えるので便利です。

 


シャッフル

面白い関数として、配列の中をシャッフルしてくれる、おみくじのような仕組みに使えそうなものもあります。

image

このようなフローで、inject ノードで ["りんご","バナナ","オレンジ"] という値を送ると、

image

このように、シャッフルされます。

image

change ノードで $shuffle(payload)と JSONata を指定するとシャッフルされます。こんな短いコードで行ってくれるのがありがたいですね。

こちらと同じように配列周りを処理するものとして

  • $reverse(array)
  • array の値を、逆順にした配列を返す
  • $average(array)
  • 数値の配列 array の平均値を返す
  • $sort(array)
  • array 内の値を並び変えた配列を返す

のような関数もそろっています。

 


JSONata 式で、ちょっと踏み込んだ計算や処理をして、つくる幅を広げてみましょう!

ということで、いくつかの JSONata Tips をご紹介しました。

もちろん、Function ノードでがっつり JavaScriptのコードを書くときは JavaScript プログラミング知識さえあれば、どこまでも複雑に計算や処理を行うことができます。ですが、そうしてしまうと、JavaScript プログラミング知識の差によって、ほかの人が編集するときに伝わりにくく修正しにくかったり、自分自身も数か月後に理解しにくい構造になってしまうときがあります。

そういうときに、JSONata を使って Function ノードで書くよりもシンプルに処理や計算ができれば、フローも見やすさを保ったまま、つくる幅が広げられますね。

image

JSONataは、このようにJSONata式エディタで書くことができます。

image

さらに、JSONata式エディタの中には、関数リファレンスがあり、

image

一つ一つの機能を確認しながら、試しに挿入できるので、ぜひやってみてください。