Slide 1

Slide 1 text

Node-RED Park Vol.3 - JSONataについて語ろう 私の JSONata を使う事例紹介 ワンフットシーバス 田中正吾

Slide 2

Slide 2 text

私の話はスライドを後ほど共有します。 話す内容に注力いただいて大丈夫です!

Slide 3

Slide 3 text

田中正吾(たなかせいご) 屋号:ワンフットシーバス 2004年よりフリーランス。以後、FLASH制作を 中心にインタラクティブコンテンツを主に行い現 在に至る。 最近ではWEBフロントエンドをベースにしなが らも、情報とインターフェースが合わさるアプ ローチという視点でIoTやMixed Realityといった 技術も取り入れながら活動しています。

Slide 4

Slide 4 text

まず、気をつけていきたい発音 じぇーそねーたーって言いがち。じぇーそなたらしい。 https://www.youtube.com/watch?v=ZBaK40rtIBM

Slide 5

Slide 5 text

JSONata よく使っています

Slide 6

Slide 6 text

いくつか事例を紹介

Slide 7

Slide 7 text

毎年の年末に振り返る記事2020の事例 https://www.1ft-seabass.jp/memo/2020/12/31/look-back-over-2020/

Slide 8

Slide 8 text

2021 だとちょっと別の仕組み https://www.1ft-seabass.jp/memo/2021/12/31/look-back-over-2021/

Slide 9

Slide 9 text

Node-RED の JSONata で 月の初日と最終日を取得するメモ https://www.1ft-seabass.jp/memo/2021/12/25/node-red-jsonata-firstday-lastday-span/

Slide 10

Slide 10 text

日付関連の扱いはやはり強いと思います! Node-RED の JSONata で日付と時間をうまく扱える Tips https://qiita.com/tseigo/items/e7deb8d6d4902a4aef30

Slide 11

Slide 11 text

こんなデータで JSONata や他の扱い方をしてみる タスクを想像させるようなデータ。詳細を見てみましょう。

Slide 12

Slide 12 text

Node-REDにこのデータを入れる

Slide 13

Slide 13 text

テーマは「Priority high だけ取得」

Slide 14

Slide 14 text

function ノード

Slide 15

Slide 15 text

JavaScript で組めるので頑張ればイケるが それなりにコードを書くことになる 自由度も高いが時間もかかる。Array.filterやreduseがハマれば、より簡単にかける場合も。

Slide 16

Slide 16 text

JavaScript Array 関数まわりも強力なので 併用していくもの良いなと思います https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

Slide 17

Slide 17 text

デモしてみる

Slide 18

Slide 18 text

change ノード+JSONata

Slide 19

Slide 19 text

change ノードで JSONata クエリを通して 先ほどと同様の処理がイケる

Slide 20

Slide 20 text

デモしてみる

Slide 21

Slide 21 text

複雑な JSON データから (クセはあるが)手軽にデータが取得できる

Slide 22

Slide 22 text

鍛え方とか、便利 TIPS

Slide 23

Slide 23 text

やはり本家ドキュメントは分かりやすい 英語だけど大体伝わる。ちょっと見てみましょう。 https://jsonata.org/

Slide 24

Slide 24 text

クエリ試すときは JSONata Exerciser おススメ 本家サイトで試せる https://try.jsonata.org/

Slide 25

Slide 25 text

さきほどのもこんな風に試せる

Slide 26

Slide 26 text

いくつか便利クエリ紹介

Slide 27

Slide 27 text

TimeEstimate 値を合計 $sum(*.TimeEstimate)

Slide 28

Slide 28 text

デモしてみる

Slide 29

Slide 29 text

Tags に private が含まれる *[$contains(Tags,"private")]

Slide 30

Slide 30 text

デモしてみる

Slide 31

Slide 31 text

Tags に private が含まれる+TimeEstimate 合計 $sum(*[$contains(Tags,"private")].TimeEstimate)

Slide 32

Slide 32 text

デモしてみる

Slide 33

Slide 33 text

debug ノードでも JSONata 使える Tips

Slide 34

Slide 34 text

➔ 複雑な JSON データから JavaScript でループや分岐を駆 使しがちなものが手軽に取れるようになる! ➔ 合計や平均値など SQL にあるような集計関数も使えて データの再加工はしやすい! ➔ 日付にも強く ISO 8601 フォーマットやタイムスタンプの 相互変換もしやすく、時差についても考慮がある! ➔ JSONata のドキュメントがしっかりあり、自分のデータ で試しながら鍛えられる! ➔ クセはあるが Node-RED で JSONata を覚えると色々と強 力な処理ができるので、ぜひ使ってみてください! まとめ