すこしPower Automateが入ってきます
(1)ではJSONのルールを、(2)ではデータ型に関する説明、(3)では与えられたJSONの構造をどう読んでいくかを解説してきました。
今回はすこし Power Automate に寄せて、与えられたJSONの、特定の値を取得するにはどうするかを見ていきます。
準備
準備として、Power Automate の「作成」アクションに以下のJSONを入れます。これだけでオブジェクト型のJSONを定義できます。
{ "本人情報": { "氏名": "慈英 孫", "カナ": "ジエイ ソン" }, "年齢": 35, "家族構成": [ { "氏名": "慈英 妻", "続柄": "妻" }, { "氏名": "慈英 子", "続柄": "子" } ] }
※「作成」アクションの結果 (できるJSON) には outputs('作成')
でアクセスできます。
ケース1 : シンプルな値の取得
上のJSONで35
という値を取得したいとしましょう。この時は何を指定すればいいのか。
前回のJSONの読み方と同様に、インデントに沿ってみていきます。
- 1つインデントした位置に含まれているキー/識別子は
本人情報, 年齢, 家族構成
の3つ - 35 は 識別子 = "年齢" に対応した値 なので、
outputs('作成')?['年齢']
で取れます。
JSONオブジェクトの特定のキー/識別子の値 にアクセスするには
outputs('作成') ? ['キー/識別子名']
を指定しましょう。識別子の前後にシングルクォーテーションが必要なことに注意してください。
余談ですが、"?"を"の"と読み替えると理解しやすいかもしれません。 outputs('作成')はJSONの全体なので、「JSON全体 の 識別子=年齢 の値」のように読めます。
ケース2 : 入れ子になった値の取得
今度は 慈英 孫
という文字を取得するケースを考えます。
取得したい値が、先ほどの 35 よりも内側、「JSON全体 の 本人情報 の 氏名」の値です。この場合には下図のように辿っていきます。
入れ子になっている場合にはJSON全体 (outputs('作成')
)から見て、2回識別子を指定してあげる必要があります。
outputs('作成') ? ['キー/識別子名1'] ? ['キー/識別子名2']
のように、探していくルートを指定しましょう。
ケース3 : 配列の中の値取得
今度は 慈英 子
を取得したい場合を考えます。先ほどと同様に、慈英 子は "家族構成" の内側に入っているのですが、気を付けなければいけないのは家族構成は配列 という点です。
つまり、先ほどと同じ調子で、outputs('作成')? ['家族構成'] ? ['氏名']
としても"慈英 子"に到達できないのです。考えてみれば当然で、配列は複数の箱からできているので、まずはどこの箱かを指定しなければならないですよね。
では配列の箱はどうやって指定するのか。配列は順番を指定して中を覗きます。
配列は先頭から順に0から始まる番号がついていて、これを使って中の値にアクセスできるようになっています。
今回の例では、慈英 子は (0始まりなので)1番目 に含まれています。このような場合には ?[1] ( ?と[番号]。シングルクォーテーションはいらない ) で覗く先を指定します。
注意
JSONでは1件のみの配列とオブジェクトは明確に区別されます - [ { "氏名" : "慈英 孫"} ]
と{ "氏名" : "慈英 孫"}
は構造が違う。そのため、たとえ1件しか入っていない配列であったとしても、必ず配列の箱の番号を指定してから、中の値を見に行くようにしましょう。
ここでは ?['氏名']
ではエラーになって、?[0]?['氏名']
とする必要があります。
まとめ
今回は Power AutomateでJSONの特定の値を取得するための道筋・考え方を紹介しました。
考え方は以下の通りです。
- 特定の識別子の値を取得したいなら ?['識別子']
- 配列の特定の行の値を取得したいなら ?[順番] ※ただし0から数える
- 配列の中にオブジェクトがある場合には、まず配列の順番を指定してから、中の識別子を指定 ?[順番] ?['識別子']
この3つのルールさえ押さえておけば、あとは順々に構造を紐解いていくだけなので、Power Automateで実際に得られるJSONを使って練習してみてください。