【Power Automateではじめる業務の完全自動化】実務直結のノウハウが満載! 本連載では、企業へのMicrosoft 365の導入や活用支援を手がける著者・太田浩史氏による、Power Automateを使った業務自動化のノウハウを提供します。
JSONをやっつけよう
トリガーやアクションから出力される値の生データは、ほとんどJSON形式となっていることから、さらなる上達にはJSON形式の理解は欠かせません。読み方さえ知っていれば、読み解くのはそれほど難しくありません。この機会に扱い方を知っておきましょう。
JSONとは
JSONとは、システムに入出力されるデータの構造や値を記述するための形式の1つです。複雑なプログラミング言語のように見えるJSONですが、実は用途としてはCSVと似ています。Excelでも簡単に利用できるため、CSVなら使ったことがあるという人も多いでしょう。CSVとJSONが異なる点は、CSVがデータを列と行の2次元的にしか表現できないのに対し、JSONは階層構造にしたり入れ子にしたりとより複雑なデータを表現できることです。そしてJSONは、そうした複雑なデータであっても、人から見てもコンピューターから見ても分かりやすい表記方法であると言われています。
JSONの読み解き方
さっそくJSONで表されたデータを見てみましょう。この例は、従業員の情報を表すデータになっています。やはり一見すると複雑そうに見えますが、1つずつポイントを押さえながら読み解いていきましょう。
{ "従業員":[ { "氏名":"できる花子", "年齢":25, "名前":{ "名": "花子", "姓": "できる" }, "資格":[ "簿記3級", "基本情報技術者試験" ] }, { "氏名":"できる信二", "年齢":34, "名前":{ "名": "信二", "姓": "できる" }, "資格":[ "普通自動車免許" ] } ] }
ポイント1:それぞれの値は、名前と値のペアになっている
JSONでは、値に対して名前が付けられていることがほとんどです。値の名前を「キー」と呼びますが、キーと値は「:」を挟む形でペアになっています。例えば次のように記載されているとき、キーは「氏名」で、値は「できる花子」です。 また、キーはダブルコーテーションで囲んで表記します。一方の値は、文字列の場合にはダブルコーテーションで囲みますが、数字の場合には不要です。さらには、ブール値として「true」または「false」を値にすることもできます。
"氏名":"できる花子", "年齢":25,
ポイント2:値のペアが複数あるときには、カンマで区切る
値のペアが複数並ぶときには、それぞれのペアの間にカンマを入れて区切ります。ただし、最後のペアの後ろにはカンマは不要です。
ポイント3:関連するひとまとまりの値は波括弧で囲む
関連する複数の値を波括弧で囲むことで、それが1つの値であることを表します。例えば、従業員に関するデータには、「氏名」「年齢」「名前」「資格」の値があります。それらを波括弧で囲むことで、それら複数の値は、特定の一人に関する値であることを示しています。そして、こうしてまとめられた値を「オブジェクト」と呼びます。
ポイント4:複数の値やオブジェクトがある場合は角括弧で囲む
角括弧は、複数の値を含む可能性があることを表します。「従業員」や「資格」には、それぞれ複数の値が入る可能性があるため、角括弧で囲まれています。角括弧で囲まれた値は、式の説明にも出てきた「アレイ」として扱われます。
ポイント5:オブジェクトは入れ子にできる
オブジェクトは、入れ子にすることができます。これによって、より複雑なデータを表すことができるのですが、JSONを複雑なものに感じさせる原因でもあります。
例えば、「できる花子」の従業員データのオブジェクトの中には「名前」という値がありますが、この値は「名」と「姓」からなるオブジェクトになっています。
先ほどのJSONを見慣れた表形式のデータに書き直してみましょう。複数の値が入る従業員というアレイには、「できる花子」と「できる信二」の2つの表が含まれます。これらの表がオブジェクトです。また、「名前」の列には、「名」と「姓」の値を持つ別の表が入れ子にされています。この表もまたオブジェクトであり、この関係がオブジェクトの入れ子です。
複雑に見えるJSONのデータですが、これらのポイントに従って読み進めていくと、見慣れた表形式のデータに読み解くことができます。はじめのうちはルールを意識しながら、ゆっくりと理解していきましょう
Power AutomateでJSONを扱うには
Power AutomateでJSONを扱うには、第4章で紹介した[JSONの解析]アクションを利用する方法がもっとも手軽で簡単です。さらに「式」を利用することで、より柔軟にJSONを扱えるようになります。式でJSONを扱うメリットは、トリガーやアクションの出力の生データをJSON形式のまま利用できることです。そうした出力は動的なコンテンツとしても利用できますが、中には動的なコンテンツに含まれない値もあります。式でJSON形式の生データを扱うことで、すべての値を利用できるようになります。
JSONデータを扱うフローを作成する
式を利用したJSONの扱いを練習するために、まずは簡単なフローを用意しましょう。[手動でフローをトリガーします]トリガーを利用したフローを作成し、[データ操作]の[作成]アクションを2つ追加しておきます。さらに、1つ目の[作成]アクションの[入力]には、先ほどのJSONを練習用ファイル「L027_従業員情報.txt」からコピーして入力しておきましょう。
outputs関数でJSONのデータを取得する
[作成]アクションの[入力]に式を書いていきましょう。まずは、アクションの出力を取得するためのoutputs関数を利用します。式が設定できたら一度テスト実行を行い、関数の実行結果を確認します。outputs関数によって、[作成]アクションに入力したJSONのデータをそのまま取得できることを確かめたら、次に進みます。ちなみに、トリガーの出力を取得するときは、triggerOutputs関数が利用できます。
関数名 | 説明 | 利用例 |
---|---|---|
outputs | 引数に指定した名前のアクションの出力を取得する | outputs('項目の取得_2') (アクション名に半角スペースが含まれるときは、半角のアンダースコアに置換する) |
triggerOutputs | トリガーの出力を取得する | triggerOutputs() |
フローを実行して出力を確認する
氏名の値を取得する
式を利用して、1つ目の従業員のデータから氏名の値を取得してみます。このためには、次のような式を作成します。
この式を理解するためには、JSONと式を並べて比べてみましょう。JSONを階層構造として考え、「❶アクションの出力」の「❷従業員アレイ」の「❸0番の要素」の「❹氏名」と、キーの名前とアレイの要素番号を利用しながら順に辿っているのが分かります。そして、それぞれの項目をクエスチョンマークでつないでいます。この式も作成したらテスト実行してみて、目的の値が取得できるか確認します。
フローを実行して出力を確認する
そのほかの値を取得する
さらに、式を書き換えてみて、次のようないくつかのパターンを試してみましょう。従業員の値はアレイになっているため、できる花子の情報はfirst関数を利用しても取得できます。
さらに上達!項目間の「?」の有無による挙動の違い
各項目の間のクエスチョンマークを省いても同じ値を取得できますが、クエスチョンマークを省いた式は、実行時にエラーが発生することがあります。わざとエラーが発生するように、元のデータには存在しない「従業員アレイの2番の要素」を取得するように、次のような式を作成してみましょう。以下の通りクエスチョンマークを利用した式は、エラーにはなりません。その代わり、値が存在しなかったこと意味する「null」という特殊な値を取得します。ほとんどの場面ではクエスチョンマークを利用する書き方で問題ありません。ただし、値が見つからなかった場合にその時点でフローの実行を即座に中止したい場合などは、クエスチョンマークを省いた式を利用します。
クエスチョンマークを省略した場合
クエスチョンマークを入力した場合
関連記事
本連載は、インプレスの書籍『Power Automateではじめる業務の完全自動化(できるエキスパート)』の内容に基づいています。紹介している情報は、書籍発行時点(2023年9月)のものです。