Power Appsではとても簡単にJSONをつくれます!条件付きで
今回はPower AppsでJSONデータを作成する方法のご紹介です。
最終的にはPower AppsでLINEのリッチメニューシミュレータ&JSON出力を作成しましたので、今回例として利用するスキーマはLINEリッチメニューのものです。 以下、サンプルデータ:
[
{
"bounds": {
"x": 34,
"y": 24,
"width": 169,
"height": 193
},
"action": {
"type": "message",
"text": "Hello World!"
}
},
{
"bounds": {
"x": 229,
"y": 24,
"width": 207,
"height": 193
},
"action": {
"type": "uri",
"uri": "https://www.line-community.me/"
}
}
]
特にレイアウトを記述する"areas"部分の配列をPower Appsで作成していきます。
※条件付きで の部分は後述
単純なオブジェクトの例
上記のサンプルデータから離れて、手短に簡単なオブジェクトを作ってみます。
{
"x": 34,
"y": 24,
"width": 169,
"height": 193
}
Power AppsにはJSON関数というものがあり、これを用いてJSONデータを作成できます。
何らかのボタンを用意して、ボタンのOnSelectアクションに以下のように式を書いてみます。
Set(
sampleObject,
JSON(
{
x: 34,
y: 24,
width: 169,
height: 193
},
JSONFormat.IndentFour
)
)
これで、ボタンを押したときに、目的のオブジェクトが生成されます。 "オブジェクト"と言っていますが、JSON関数の結果は文字列です 。

ちょっと発展させて、サンプルのうち、heightの値を入力できるようにしてみます。
Power Appsにはテキスト入力コントロールを配置して、ボタンのOnSelectを以下のように置き換えます。
height: Value(TextInput1.Text)

注意事項1
ここで「条件付き」の1つ目ですが、Power AppsでJSONを使ってデータを作る際、Key:Valueのうち Valueは動的 (ユーザー入力等)にできますが、Key は固定です (数式内で明示的に与える必要がある)。
この制限は、そもそもPower Appsでレコード型のデータを作成する場合の制約で、回避するには、頑張ってスキーマ通りに文字列結合をConcatinate関数で行うくらいしかありません。
少し複雑な例
『Keyとして出てくるものは決まっているけど、条件によって切り替えたい』 であれば、Power Apps上のIf関数やSwitch関数で対応できます。
実際、LINEリッチメニューのケースでも登場しています。
例えばドロップダウンの値に応じてKeyを変えたいなら、Switch関数を利用して;
Set(
sampleObject,
Switch(Dropdown1.Selected.Value,
"message",
JSON(
{type:"message",
text:TextInput1.Text
},
IndentFour
),
"uri",
JSON(
{type:"uri",
uri:TextInput1.Text
},
IndentFour
)
)
)
このように表現できます。

配列 = Collection
シンプルなオブジェクト以外にも、配列、CollectionもJSONに書き換えられます。
Set(sampleArray, JSON(collection , IndentFour))
数式は上記のとおりシンプルなのですが、Collectionを取り扱うときには、Keyに関する注意事項があります。
注意事項2
例えば、DropdownでKeyを切り替えてCollectionにレコードを登録する場合、Collect時点で指定されなかったKeyは、最終的なJSONに含まれません。

一方で、Keyを指定して、 Blank() をValueとしてセットすると、最終的なJSONにnullが入ります。

Collectionを見ている分にはわからない違いなので、注意しましょう。
おわり
とにかくJSON関数を利用して、レコードやCollectionからJSONを作成することができました。
Power Appsでこのように作ったJSONを、Power Automateで利用する場合の使い方は、過去の投稿をご覧ください。