ブロックを積みながら(81) Node-RED、yamlノードでオブジェクトと相互変換

Joseph Halfmoon

昨日は「第4回目接種」でありまして倦怠感あり、何もやる気が起きませぬ。気を取り直して予定の yaml ノードをやっつけてしまう所存。やっつけなので、内容は?、まあ、いつものことですかね。

※「ブロックを積みながら」投稿順 index はこちら

さて、YAMLと聞いたら頭の中では、”Yet Another Markup Language”の略だろ~と短絡的に思ったのです。今時の若者は知らず、

yacc  “Yet Another Compiler Compiler”

が即座に思い浮かぶからであります。実際、「初期のころ」はYet Anatoher Markup Languageという名乗りだったらしい YAML は、現在では、

YAML Ain’t Markup Language

と名乗られているようです。頭山的(再帰的)かつ否定形で名乗りを定義するなんざGNUにあやかったものと想像されます。

GNU is NOT UNIX

まあ、Markup Languageなんだかそうでないのかよく分からぬYAMLですが、公式サイトは以下に。

https://yaml.org/

上記の公式サイトはアクセスすると分かりますが、「伝統のテキストブラウザ」でアクセスしてもOKなページです。今更みると「かくあらねばならぬ」ような気もいたします。なお、最新バージョンの仕様を解説している以下のページは「今時フツー」なスタイルです。

YAML Ain’t Markup Language (YAML) version 1.2

yamlノードと実験に使ったフロー

yamlノードは、yaml形式の「文字列」がpayloadに載ってくると、Node-REDのオブジェクト(JSONオブジェクト)に変換し、オブジェクトがPayloadに載ってくると yanl形式の「文字列」に変換してくれる相互変換可能なノードです。

今回の実験フローは、左のInjectノードより、

    • YAML文字列
    • JSONオブジェクトの配列
    • JSONオブジェクトの構造をもったオブジェクト

を同じ yaml ノードに突っ込んで変換結果を見るだけの「手抜き」です。yamlTestFlow

yaml ノードの設定が以下に。というか、まったく設定してません。デフォルトのまま。

yamlNodeSetting

実験結果

最初は以下のような文字列(payloadのところに azと表示されているのが文字列の意味です。)を食わせてみました。まったくダブルクォーテーションとか無。素の文字列です。

YAMLscalar

yaml を通過した結果が以下に、payload: objectになっとります。そして abcというプロパティに、文字列の値 “def” が載っておる、と。

YAMLSTR2OBJ

続いてpayloadに配列(オブジェクト)を載せてみます。[1, 2, 3 4]っと。

jsonArray

yaml ノードを通過すると、yaml の「リスト」形式の文字列に変換されとります。こんな感じ。OBJ2YAMLLIST

最後は、一応「構造」をもったささやかなオブジェクトです。

jsonOBJ

yamlノードを通過すると、段付けで構造を表した yaml 形式の文字列になっとります。OBJ2YAMLMAP

怠いので、これにて完了。

ブロックを積みながら(80) Node-RED、jsonノードで文字列とオブジェクト相互変換 へ戻る

ブロックを積みながら(82) Node-RED、Rpi-Mouseノードでクリックを検出 へ進む