Node-RED Version 0.14から新しくSplitノードとJoinノードが追加されました。
これは配列メッセージの各要素を分解して1つのメッセージとして流すSplitノードと、分解されたメッセージを配列/文字列/オブジェクトなど多様な型として結合するJoinノードのことで、これらを使いこなすことでループするフローを作成する必要がほとんどなくなります。
Splitノード
配列をSplit
Splitノードは何も設定せず配列データを渡すだけで動作が解ります。
文字列をSplit
配列だけではなく文字列とオブジェクトも分解できるようです。以下は;
で分けてみました(デフォルトの例は改行コード)
1:2:3:4:5
という文字列を渡すと先ほどと同様、各要素のメッセージに分割されました。
オブジェクトをSplit
続いてオブジェクトです。Injectノードに以下のようなJSONを渡します。
これだけでメッセージが分割されます。簡単ですね。
Joinノード
配列をSplitして配列でJoin
まず、配列をSplitして配列としてJoinします。これは何もしないでJoinノードを置くだけです。
配列をSplitして文字列でJoin
次に配列 -> 文字列です。Joinノードの設定を開いて以下のように設定します。
これで配列 -> 文字列になりました。
配列をSplitしてオブジェクトでJoin
次に配列 -> オブジェクトです。オブジェクトにするためにはkey
が必要です。それはSplitされた後にmsg.parts.key
など(任意で他のプロパティでも良い)で指定します。
以下のようにSplitノードの後にChangeノードを配置します。
Changeノードは以下のように設定します。
ただし、このままではすべての値のkey
がval
になってしまうので以下のようにChangeノードの後にTemplateノードを置きます。
Templateノードは以下のように設定します。msg.parts.key
は先ほどChangeノードで設定したval
がSetされていて、msg.parts.index
にはSplitされたタイミングで配列の要素番号がSetされています。これを連結するわけですね。
最後にJoinノードを以下のように設定します(要素数は入力時と同様に5つにする場合でも明示的に5
と入力する必要があります)
以下のような結果になります。