(´・ω・)ノ < らいなーです。
結論としてはJSON.Stringifyの引数を活用しますが、ポイントとしては、一度Javascriptコード内部でvar宣言で、Macrodroid側から受けとる任意のJSON文字列をワンクッション、インスタンスをしてから操作する。
Macrodroidの「Javascriptコード」アクションでJSONをオブジェクトとして扱うには、
前述のJSON.Stringifyを使ってパースしたのち、JSON.parseを用いて、JSONをMacrodroidのJavascriptコード側の内部でオブジェクト型変数として宣言してあげる必要があります。
健康診断、終わるのが最後の方から二人前でしたわ…
さて、
今回は「Javascriptコード」アクションを用いたJSON文字列を見易くしてみたいと思います。
結論としてはJSON.Stringifyの引数を活用しますが、ポイントとしては、一度Javascriptコード内部でvar宣言で、Macrodroid側から受けとる任意のJSON文字列をワンクッション、インスタンスをしてから操作する。
これにつきますね。
JSON.StringifyはJavascriptにおいて、JSON構造を文字型に変換する標準関数です。
Mozilla Devあたりを見て頂くと、専門的な知識が入手出来ます。
【サンプルを見る際のポイントは?】
JSON.Stringifyの書き方です。
通常、省略されてしまう引数を含めて書くと…
JSON.stringify(値, リプレーサ, インデントレベル)
となります。
リプレーサには要素の置き換えをするときに値を入れますが、特に変換が必要ない場合には、nullと書きます。多分省略も出来ますが、なんか書き方的には見づらい…というかメンテナンスするときには解りづらいです。
インデントレベルはスペースであり、日本語で表現すると「字下げ」ですね。子ノードに対して、親ノードから何個ぶん、スペースを差し込んで見易くするんだい?と。
スペースの個数を整数値で指定します。
MD-Discodeで爵位持ちの鶏の精霊さんがAIに聞いたら「2」がオススメと回答されたそうな。秀丸とかサクラエディタとかEclipse民的には「4」と思いがちですが、後者にするとMacrodroidの変数ビューワーでは確かに見づらかったです。
【Javascript側でJSON構造から特定のノードの値を取得するには?】
Macrodroidの「Javascriptコード」アクションでJSONをオブジェクトとして扱うには、
前述のJSON.Stringifyを使ってパースしたのち、JSON.parseを用いて、JSONをMacrodroidのJavascriptコード側の内部でオブジェクト型変数として宣言してあげる必要があります。
このお作法は面倒がありますが、やらないとエラーを吐きます。
要は、Macrodroidの世界の中にJavascriptの領域が出来てしまうので、
・変数を宣言し、Macrodroid側から「Javascriptコード」アクションに引き渡し
・引き渡された変数をJSONオブジェクトとして、MacrodroidのJavascriptコードの領域にインスタンスして、操作出来るようにする
というステップが必要です。
さらに、要素操作では、昨今のプログラミング言語の書き方に慣れてしまっていると、「ドットで区切った要素指定で」書きがちですが、ブランケット記法を用いる必要がありました。
なかなかにコツが要りますが、使い方がわかってくると、シェルスクリプト的な使い方を出来るアクションが、"更に"増えた事になりますから、マクロ実装の幅が拡がりますね!
記事は以上です。
ここまでお読み下さりありがとうございました。