LoginSignup
1
1

More than 5 years have passed since last update.

Node-redのJSonataの事例1 〜グローバル変数の検索に別の変数の値を使う〜

Last updated at Posted at 2018-11-03

はじめに

Node-redではJSonataが使えます。
これ結構便利なんですが、あまりJSonataの本家サイトのガイド見ても基本的な事しか書いてないので、色々試行錯誤した結果をメモします。
(全三部作です。)

グローバル変数で、検索時に変数を使いたい時

例えば、Global変数の中に遊園地の一覧が配列で格納されたTMPというJSONがあるとします。

[
  {
    "name":"東京ネズミーパーク",
    "pref":"Chiba",
    "serial":000001
  },
  {
    "name":"ドイツの村",
    "pref":"chiba",
    "serial":000002
  },
  {
    "name":"読み書きランド",
    "pref":"tokyo",
    "serial":000003
  }
]

それで、例えばchibaのテーマパークのシリアルを一覧したい場合、JSonata的には

$globalContext( "TMP" )[ pref = "chiba"].serial

と書けば良いんだけど、この"chiba"に当たる箇所に変数を使いたくなっちゃったんです。
だけどどーにもちゃんと動かない。
そこでFunctionを使うと上手く動きます。
(ちなみに今回の例では、別途書く予定の記事の仕込みとして、$joinで一つのテキストに繋げてます。。)


$join(function($section , $tmplist ){
   $tmplist[ pref = $pref ].serial
}(
   $._pref,
   $globalContext( "TMP" )     

), " ")

一応解説すると、、

function( $a, $b ){
   $a & $b
}( $A, $B )

この{}内に処理内容を記述して、後ろの()内に渡したい引数を記載する感じで書けます。

本家のガイド

以上です。ありがとうございました。

第二弾の記事はこちら

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1