Joinノードを使う(その1)

ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回はJoinノードを見ていきます。その名の通り、複数のメッセージを結合するのが役割です。前回ご紹介したSplitとは逆ですね。

確認するサンプルは、「読み込み > サンプル > flows > node-red > sequence > join > 01 - Automatic join mode」です。「自動モード」とやらがポイントのようです。3つのフローから構成されているので順に見ていきます。


Splitノードで分割したメッセージをJoinノードの自動モードで結合する

一番上の段は、Splitノードで分割したメッセージをJoinノードの自動モードで結合するサンプルです。左側のTemplateノードから設定を見ていきます。ここでは「msg.payload」に改行区切りの文字列を指定しています。


続いて、その右側にあるSplitノードです。msg.payloadには文字列が格納されているので、改行(\n)ごとに個別のmsgオブジェクトに分割します。


続いて、Joinノードは以下のように設定されています。
  • 動作:自動
    • このモードでは、本ノードがSplitノードと組となるか、msg.partsプロパティが設定されたメッセージを受け取ることが前提となります。


このフローではmsg.partsプロパティは存在しないため、Splitノードと組となることが前提で動作します。実行すると以下のように4つに分割されたであろうメッセージが1つに結合されています。


これだけ見ると、分割した文字列をものをそのまま結合しただけなので、何が嬉しいのかサッパリ理解できませんが、ここでは基本的な動作はこういうものだと認識するのに留め、次のフローを確認していきます。

CSVデータをJSON配列に変換する

続いて2段目のフローでは、CSVデータをJSON配列に変換するサンプルです。結構使える場面が多いのではないでしょうか。例によって左から順に設定を見ていきます。Templateノードではmsg.payloadにCSVデータが指定されています。1列目が「name」で文字列データ、2列目が「price」で数値データ。各レコードは改行(\n)で区切られています。


続いて、csvノードです。CSVデータが入力されるので、以下の赤枠で囲った部分の設定が働きます。
  • CSVをオブジェクトに変換する
  • 1行目に列名を含む
  • 数値を変換する
  • 行ごとにメッセージを分割

参考までに、Csvノードから出力されるmsgオブジェクト全体をログ出力すると、以下のような内容になっています。先ほどチラっと出てきたmsg.partsプロパティが見えます。どうやらこいつがこの後のJoinノードで利用されるようです(どのメッセージを結合対象とするか判断しているのではないかと思います)。


最後にJoinノードは最初にご紹介したフローと同じく自動モードになっています(画面キャプチャは省略)。

これを実行すると、Csvノードで分割されたメッセージがJSON配列に結合されて出力されます。なんかいい感じです。


CSVデータから条件を満たさないものを除外してJSON配列に変換する

3段目のフローでは、2段目のフローに条件を加えて、指定した条件を満たさないものをJSON配列から除外します。CsvノードとJoinノードの間に挟まっているSwitchノードがポイントです。「msg.payload.price」の値が100を以上のものをポートから出力します。


その他は2段目のフローと同じです。これを実行すると以下のようにpriceが100以上のオブジェクトのみ抽出されたログが出力されます。

まとめ

ここまで確認したことをまとめます。
  • Joinノードの自動モードはSplitノードとセットで利用する
  • 他に、自動モードはmsg.partsを利用して結合動作を制御できる
  • CSVデータをJSON配列に変換できる
    • ついでにプロパティの値に応じてフィルタできる
Joinノードシリーズはもう少し続きます。

コメント

このブログの人気の投稿

Execノードを使う

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)

Joinノードを使う(その4)