今回はjsonノードです。文字列とNode-REDの主要データ構造であるJSONオブジェクトを相互変換できるもの。実用的には変換時にSchemaによるバリデーションを行えることが重要かと。でもね、面倒臭いのよSchema。今日のところは自分で自分にデータを投げつけているだけなので省略。いいのか、そういうことで。
※「ブロックを積みながら」投稿順 index はこちら
今回のJSONノードは、単なる文字の羅列であるJSON文字列とプログラムで操作可能なJSONオブジェクトの間を相互変換してくれるノードです。用途としてはネットから送られてきたり、テキストファイルから読み出したJSON文字列をNode-RED内で処理可能にすること。あるいは逆にNode-REDから外部に出力するためにオブジェクトを文字列化するもの。
ある組織(システム)から他の組織(システム)にデータを送るような場合、あっちゃとこっちゃでデータ構造に誤解があると大問題です。そこでschemaと呼ばれるような、データ構造を「キッチリ」抑える定義を用いて検証し「ちゃんと適合しているもんね」ということで受け入れを決めることになるのだと思います。XMLしかり、そして今回のJSONしかり。JSONノードもこの機能をもっています。とは言え、schemaは厳格で、正直メンドイので JSONノード初回の今回はパスです。単に変換のみ。schemaによるバリデーションはまた別の機会に勉強することにしたいと思います。よわよわだな自分。
今回実験につかったフロー
今回実験したNode-REDフローが以下です。
-
- 左端のInjectノードで「JSON文字列」サンプルをpayloadに載せて送出する
- 次段、STR2JSONという名のjsonノードで、これをjsonオブジェクトに変換する
- 最後、JSON2STRという名のjsonノードで、上記のjsonオブジェクトを再び文字列に変換する
- この様子を順次DebugノードでDebug Windowに出力し、観察する
各ノードの設定
Injectノードの設定が以下に。シンプル極まりないですが「JSONになる文字列」を1つmsg.payloadに載せて送出します。値のところが「a z」、つまり文字列に設定してあるのをご確認くだされ。
第1のjsonノードは以下です。jsonノードは文字列からオブジェクト、あるいはオブジェクトから文字列への「単方向」動作に限定することもできます。しかしデフォルトの「相互変換」にしておけば、到来したものが文字列ならばオブジェクトへ、オブジェクトが到来したら文字列へとよきに計らってくれます。
第2のjsonノードの設定は以下です。こちらはオブジェクトから文字列への変換を行うのですが、動作はやかり「おまかせ」です。ただ下の方の「JSON文字列フォーマット」にチェックを入れてあります。これにより美しくフォーマットされた文字列出力が得られる筈。
実行結果
Injectノードを押したときの実行結果が以下に。上から
-
- Inject Nodeから送出された文字列(ダブルクォーテーション)
- 最初のjsonノードでオブジェクト変換されたもの
- 2番目のjsonノードで文字列の戻されたもの(美麗フォーマット済)
まあ、変換するだけなら簡単だと。ちゃんとschemaやるんだろーな、自分。