2018年2月5日月曜日

setProperty 関数で子要素を書き換える

LogicFlow で JSON オブジェクトの値を操作するための setProperty 関数ですが、子要素を書き換えたいと思った場合、少し手間をかけて行う必要がありました。

行おうとしたのは以下のようなことです。

“aaa” と “bbb” という要素を持つ JSON 値で、”bbb” については子要素として “ccc” と “ddd” が存在しているような場合です。この時に ccc の値を書き換えたいとした場合、単純には setProperty 関数を利用することができません。

image

検証するために、以下のような LogicFlow を作成してみます。

image

最初にオブジェクト変数 wkJson を作成し、元となる JSON 値を設定します。

次に setProperty 関数を用いて ccc の値を書き換えます。

ここで以下のように setProperty 関数を利用することで、ccc の値を書き換えることができました。

setProperty(variables('wkJson'),'bbb',setProperty(variables('wkJson')?.bbb,'ccc','100'))

setProperty 関数を二つ利用する方法です。最初に中に記述されている setProperty(variables('wkJson')?.bbb,'ccc','100') の部分ですが、変数 wkJson の bbb の値に対して、bbb の子要素 ccc を 100 に書き換えます。

その結果で、変数 wkJson の bbb を書き換えます。setProperty 関数は書き換えた結果を別の変数として結果を返却し、書き換えもとで指定した変数を本当に書き換えているわけではありません。上の LogicFlow でいえば、最後に「作成2」のところで wkJson の値を確認していますが、ここでは最初に変数作成した時と同じ値となります。

image

このように、結果の扱い方と子要素だけ書き換える際は setProperty 関数をネストして利用することに気を付ければ、JSON 値を好きなように編集が可能です。

0 件のコメント:

コメントを投稿