18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowerAutomate: はじめての JSON (JSON なんて怖くない)

Last updated at Posted at 2022-04-10

背景

プログラミング経験があまりないと、JSON って聞くだけで難しく感じます。
その上で、JSON 解析(ParseJSON) を、って説明すると、思考停止してそうだったので、ひとまず JSON についてまとめ。

ローコードとはいえ、いろんな事やりたくなると JSON は避けて通れないですよね

概要

JSON 概要

この記事が結構よさげなので、翻訳してでも見てみるといいかも。

念の為、軽く抜粋すると・・

JSON は、構造化データをテキストとして表現するための標準形式
JSON データは、名前と値のペアを含む「オブジェクト」

基本
{ "name": "Parker" }

複数のペアを入れるなら、カンマで区切る。最後にカンマは不要。順不同

複数プロパティ
{
  "name": "Parker",
  "species": "porcupine"
}

文字列は、二重引用符で囲む。特殊文字は '' を前につけることで無視させる(エスケープ)。

特殊文字のエスケープ
{
  "name": "Parker",
  "action": "Parker says \"Sharing is caring\""
}

数値は、引用符不要

数値
{
  "name": "Parker",
  "centimeters": 75,
  "kilograms": 28
}

ブールも引用符不要

ブール
{
  "name": "Parker",
  "friendly": true,
  "bossy": false
}

オブジェクトを階層化(ネスト)することも可能

階層化
{
  "name": "Parker",
  "classification": {
    "kingdom": "animalia"
  }
}

配列は、角括弧(square brackets) '[', ']' で囲み、カンマで区切る

配列
{
  "name": "Parker",
  "nicknames": [
    "Quilled Crusader",
    "Spike"
  ]
}

オブジェクトも配列に出来ます

オブジェクトを配列に
{
  "mascots": [
    {
      "name": "Bit"
    },
    {
      "name": "G-raffe"
    }
  ]
}

日付けは決まりがないが、マイクロソフト Graph API は、ISO 8601 形式

ISO 8601 は wikipedia の方が分かりやすいかも

空の値は、null。配列なら空っぽで

null
{
  "name": "Parker",
  "dnaSequence": null,
  "array": []
}

JSON スキーマの役割は、JSON 構造の定義で、Parse JSON で必須設定だが、最初は実データから自動生成でよい。

あとは、Qiita で検索してもたくさん出てくるので割愛

JSON データ参照(利用)方法

大きく分けて、2つ

  1. JSON 解析して動的コンテンツで指定
  2. 直接指定

JSON 解析して動的コンテンツで指定

  • JSON 解析(Parse JSON) コネクターを使って、動的コンテンツで使えるようにする。

これを利用することで、JSON 指定をしやすくなるので、通常はこれを利用するのが楽。

  1. JSON 解析(Parse JSON) コネクター を追加
  2. [Generate from sample] を開く
  3. JSON の例をコピーしてから、[Done]
  4. Schema に JSON が生成される
    1. 必要に応じて以下などを修正

そうすると、こんな感じで簡単に使えるようになる
image.png

直接指定

直接指定は、以下利点もあるので慣れてきたら試してみよう

  • 慣れると便利
  • 動的コンテンツだと選択できない場合でも、使える
    • 恐らく、入力対象の型に対する自動フィルターなので、キーワード検索で表示させられたりもするけど

null がある場合には '?' を追加しておくことでエラーを防ごう
image.png

こうしておくと、empty() を使って null 確認も可能

鍵括弧記述

プロパティ名を鍵括弧内に、引用符(Single Quote) で囲う
image.png

鍵括弧記述
variables('JSON Object')['name']

鍵括弧記述:ネスト&配列

ネストしてる場合は、以下のように スラッシュ(Slash) で繋げて書くことも可能。
配列の場合は添え字指定(0 始まり)で、引用符不要(文字列ではないので)
image.png

ネスト&配列
variables('JSON Object')['classification/nicknames'][0]

プロパティ記述

カンマ(comma) でプロパティ名をそのまま繋げていくのでわかっていると書きやすくて便利
image.png

プロパティをそのまま記述
variables('JSON Object').name

プロパティ記述:ネスト&配列

普通にカンマで繋げていくだけ。配列の場合は、鍵括弧記述と同じ
image.png

プロパティ記述:ネスト&配列
variables('JSON Object').classification.nicknames[0]

Schema 定義エラーと対処

Invalid type. Expected {type} but got Null.

このエラーは、Schema 定義を自動で行った場合によく起こるもので、null 許容型として定義して無い為です。

ゆえに、以下の "Name" のように複数定義するか、"Value" のようにしてやると行けた筈。

null 許容定義
{
    "properties": {
        "Name": {
            "type": [
                "string",
                "null"
            ]
        },
        "Value": {}
    }
}

JSON 関連のコネクターとか関数

関数

他にも、JSON 配列とした場合には、first(), skip(), etc. といった便利なものもありますよ

名称とLink MS Doc 補足
json()
文字列または XML に対する JSON (JavaScript Object Notation) 型の値、オブジェクト、またはオブジェクトの配列を返します。
文字列とかからオブジェクト化
addProperty()
JSON オブジェクトにプロパティとその値または名前と値のペアを追加し、更新されたオブジェクトを返します。 実行時にプロパティが既に存在する場合、関数は失敗し、エラーをスローします。
オブジェクトのプロパティ追加
removeProperty()
オブジェクトからプロパティを削除し、更新されたオブジェクトを返します。 削除しようとしたプロパティが存在しない場合、この関数は元のオブジェクトを返します。
↑ の反対。削除
setProperty()
JSON オブジェクトのプロパティの値を設定し、更新されたオブジェクトを返します。 設定しようとしたプロパティが存在しない場合、そのプロパティがオブジェクトに追加されます。 新しいプロパティを追加するには、addProperty() 関数を使用します。
追加、削除、ときたら、更新
coalesce()
1 つまたは複数のパラメーターから、最初の null 以外の値を返します。 空の文字列、空の配列、空のオブジェクトは null ではありません。
null 時のデフォルト取得用など

コネクター

名称とLink MS Doc 補足
Parse JSON 無いので、説明ページ 動的コンテンツに無いときは、これを使って色々と取得するのでとても便利なので、絶対覚えよう
作成(compose)
クラウド フローを設計するときに同じデータを複数回入力する必要がないようにするためのアクション
変数と似た感じ。変数は最上位で初期化が必要だが、こちらはその都度なので、一時的な受け皿に便利
選択(select)
配列内のオブジェクトの形状を変換します。 たとえば、配列内の各オブジェクトの要素を追加、削除、名前変更できます。
これもとても便利。
・配列オブジェクト⇒新たなオブジェクト配列
・配列オブジェクト⇒素の配列
などが出来るので、必要な情報を集めてこれで結合って感じ。Adaptive Card の動的生成にもオススメ

選択(select) や フィルター配列(Filter Array) の例は以下で

JSON の確認方法

フローエディター上での確認もしやすくなってはいるものの、詳細に見たい場合は画面の広さや検索のしやすさなどからテキストエディターがお勧め

VS Code なら、以下でフォーマットしてみると見やすくなります

  1. JSON ペースト
    (自動認識されない場合)
    1. CTRL + SHIFT + P
    2. 言語モードの変更(Change Language Mode) を選択
    3. JSON を選択
  2. ALT + SHIFT + F でフォーマット

あとがき

トリガーやコネクターの動きはドキュメントを見てもイメージが出来ないことがあるので、
一度動かして、JSON を確認してみるのが一番かな?と

習うより慣れろ、ですね

keyword

what is JSON in Power Automate.

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?