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をオブジェクトに変換する
- 1行目に列名を含む
- 数値を変換する
- 行ごとにメッセージを分割
最後にJoinノードは最初にご紹介したフローと同じく自動モードになっています(画面キャプチャは省略)。
これを実行すると、Csvノードで分割されたメッセージがJSON配列に結合されて出力されます。なんかいい感じです。
その他は2段目のフローと同じです。これを実行すると以下のようにpriceが100以上のオブジェクトのみ抽出されたログが出力されます。
CSVデータから条件を満たさないものを除外してJSON配列に変換する
3段目のフローでは、2段目のフローに条件を加えて、指定した条件を満たさないものをJSON配列から除外します。CsvノードとJoinノードの間に挟まっているSwitchノードがポイントです。「msg.payload.price」の値が100を以上のものをポートから出力します。
まとめ
ここまで確認したことをまとめます。
- Joinノードの自動モードはSplitノードとセットで利用する
- 他に、自動モードはmsg.partsを利用して結合動作を制御できる
- CSVデータをJSON配列に変換できる
- ついでにプロパティの値に応じてフィルタできる
Joinノードシリーズはもう少し続きます。
コメント
コメントを投稿