Azure Logic Apps を使用するワークフローで Liquid テンプレートをマップとして使用して JSON と XML を変換します。

ロジック アプリ ワークフローで基本的な JSON 変換を実行する場合は、Compose アクションや Parse JSON アクションなどの組み込みのデータ操作を使用できます。 ただし、一部のシナリオでは、反復、制御フロー、変数などの要素を含む高度で複雑な変換が必要になる場合があります。 JSON から JSON、JSON からテキスト、XML から JSON、または XML からテキストへの変換の場合、Liquid オープンソース テンプレート言語を使用して、必要なマッピングまたは変換を記述するテンプレートを作成できます。 このテンプレートは、Liquid 組み込みアクションをワークフローに追加するときに選択できます。 Liquid アクションは、マルチテナントの従量課金ロジック アプリ ワークフローとシングルテナントの Standard ロジック アプリ ワークフローで使用できます。

Liquid トリガーは使用できませんが、任意のトリガーまたはアクションを使用して、ソースの JSON または XML コンテンツをワークフローにフィードできます。 たとえば、組み込みのコネクタ トリガー、Azure Logic Apps で使用できるマネージドまたは Azure でホストされるコネクタ トリガー、または別のアプリを使用できます。

この記事では、次のタスクを完了する方法について説明します。

  • Liquid テンプレートを作成する。
  • 従量課金ロジック アプリ ワークフローの統合アカウントまたは任意の子ワークフローで使用する Standard ロジック アプリ リソースにテンプレートをアップロードします。
  • ワークフローに Liquid アクションを追加します。
  • 使用するマップとしてテンプレートを選択する。

詳細については、次のドキュメントを確認してください。

前提条件

  • Azure アカウントとサブスクリプション。 サブスクリプションをお持ちでない場合には、無料の Azure アカウントにサインアップしてください。

  • ロジック アプリのリソースとワークフロー。 Liquid 操作には使用可能なトリガーがないため、ワークフローに含めるトリガーは最小限にする必要があります。 詳細については、次のドキュメントを確認してください。

  • 従量課金制または Standard ロジック アプリ ワークフローのどちらを使用しているかに基づいて、統合アカウント リソースが必要になります。 通常、このリソースは、エンタープライズ統合と B2B ワークフローで使用するために成果物を定義して格納する場合に必要です。

    重要

    連携するには、統合アカウントとロジック アプリ リソースの両方が、同じ Azure サブスクリプションと Azure リージョンに存在する必要があります。

    • 従量課金ロジック アプリ ワークフローで作業している場合、統合アカウントにはロジック アプリ リソースへのリンクが必要です。

    • Standard ロジック アプリ ワークフローで作業している場合は、次のシナリオに基づいて、統合アカウントをロジック アプリ リソースにリンクするか、マップをロジック アプリ リソースに直接アップロードするか、またはその両方を行うことができます。

      • 必要なまたは使用したい成果物を含む統合アカウントが既にある場合は、成果物を使用する場所になる複数の Standard ロジック アプリ リソースに統合アカウントをリンクできます。 こうすることで、個々のロジック アプリにマップをアップロードする必要がありません。 詳細については、ロジック アプリ リソースの統合アカウントへのリンクに関するページを参照してください。

      • Liquid 組み込みコネクタを使用すると、ロジック アプリ リソースまたはリンクされた統合アカウントに以前にアップロードしたマップを選択できます (両方のマップは選択できません)。 その後、同じロジック アプリ リソース内のすべての子ワークフローで、これらの成果物を使用できます。

      そのため、統合アカウントがないか、または必要としない場合は、アップロード オプションを使用できます。 それ以外の場合は、リンク オプションを使用できます。 どちらの方法でも、同じロジック アプリ リソース内のすべての子ワークフローで、これらの成果物を使用できます。

  • Liquid テンプレートの言語に関する基本的な知識。 Azure Logic Apps には DotLiquid 2.0.361 が使用されます。

    注意

    [Transform JSON to JSON](JSON を JSON に変換) という名前の Liquid アクションは、Liquid の DotLiquid 実装に従います。これは、特定のケースにおいて Liquid の Shopify 実装とは異なります。 詳細については、「Liquid テンプレートに関する考慮事項」を参照してください。

手順 1: テンプレートを作成する

ロジック アプリ ワークフロー内で Liquid 変換を実行するには、まず、必要なマッピングを定義する Liquid テンプレートを作成する必要があります。

  1. JSON 変換のマップとして使用する Liquid テンプレートを作成します。 必要な任意の編集ツールを使用できます。

    この記事の JSON から JSON への変換の例では、次のサンプル Liquid テンプレートを使用します。

    {%- assign deviceList = content.devices | Split: ', ' -%}
    
    {
       "fullName": "{{content.firstName | Append: ' ' | Append: content.lastName}}",
       "firstNameUpperCase": "{{content.firstName | Upcase}}",
       "phoneAreaCode": "{{content.phone | Slice: 1, 3}}",
       "devices" : [
          {%- for device in deviceList -%}
             {%- if forloop.Last == true -%}
             "{{device}}"
             {%- else -%}
             "{{device}}",
             {%- endif -%}
          {%- endfor -%}
       ]
    }
    
  2. Liquid テンプレート (.liquid) ファイル拡張子を使用してテンプレートを保存します。 この例では、SimpleJsonToJsonTemplate.liquid を使用します。

手順 2 - Liquid テンプレートをアップロードする

Liquid テンプレートを作成したら、次のシナリオに基づいてテンプレートをアップロードする必要があります。

統合アカウントにテンプレートをアップロードする

  1. Azure アカウントの資格情報で Azure portal にサインインします。

  2. Azure portal の検索ボックスに「統合アカウント」と入力し、[統合アカウント] を選択します。

    「integration accounts」と入力し、「Integration accounts」が選択された Azure portal 検索ボックスを示すスクリーンショット。

  3. 統合アカウントを探して選択します。

    統合アカウントが選択された統合アカウント ウィンドウを示すスクリーンショット。

  4. 統合アカウントのナビゲーション メニューで、[設定][マップ] を選択します。

    [マップ] が選択された統合アカウントのナビゲーション メニューを示すスクリーンショット。

  5. [マップ] ペインで、[追加] を選択します。 マップについて以下の情報を入力します。

    プロパティ 説明
    名前 JsonToJsonTemplate マップの名前 (この例では "JsonToJsonTemplate")。
    マップの種類 Liquid マップの種類。 JSON から JSON への変換では、[liquid] を選択する必要があります。
    Map SimpleJsonToJsonTemplate.liquid 変換に使用する既存の Liquid テンプレートまたはマップ ファイル (この例では "SimpleJsonToJsonTemplate.liquid")。 このファイルを見つけるには、ファイル ピッカーを使用できます。 マップ サイズの制限については、制限と構成に関する情報を参照してください。

    新しいテンプレートがアップロードされた [マップの追加] ウィンドウを示すスクリーンショット

テンプレートを Standard ロジック アプリにアップロードする

  1. Azure portal で、ご利用のロジック アプリ リソースを見つけて選択します。 ワークフロー レベルではなく、リソース レベルであることを確認します。

  2. ロジック アプリ リソースのナビゲーション メニューで、[成果物][マップ] を選択します。

  3. [Maps] ペインのツール バーで、 [追加] を選択します。

  4. [マップの追加] ペインで、テンプレートに関する次の情報を指定します。

    プロパティ 説明
    名前 JsonToJsonTemplate マップの名前 (この例では "JsonToJsonTemplate")。
    マップの種類 Liquid マップの種類。 JSON から JSON への変換では、[liquid] を選択する必要があります。
    Map SimpleJsonToJsonTemplate.liquid 変換に使用する既存の Liquid テンプレートまたはマップ ファイル (この例では "SimpleJsonToJsonTemplate.liquid")。 このファイルを見つけるには、ファイル ピッカーを使用できます。 マップ サイズの制限については、制限と構成に関する情報を参照してください。
  5. 終了したら、 [OK] を選択します。

    マップ ファイルのアップロードが完了すると、 [マップ] の一覧にマップが表示されます。 統合アカウントの [概要] ページの [成果物] には、アップロードしたマップも表示されます。

手順 3: Liquid 変換アクションを追加する

次の手順では、従量課金および Standard ロジック アプリ ワークフローの Liquid 変換アクションを追加する方法を示します。

  1. Azure Portal から、デザイナーでロジック アプリ ワークフローを開きます (まだ開いていない場合)。

  2. ワークフローに必要なトリガーやその他のアクションがワークフローにない場合は、最初にそれらの操作を追加します。 Liquid 操作には、使用可能なトリガーがありません。

    この例では、[HTTP 要求の受信時] という名前の要求トリガーを使用して続行します。

  3. ワークフロー デザイナーで、Liquid アクションを追加するステップの下にある [新しいステップ] を選択します。

  4. [操作を選択してください] の検索ボックスで、 [すべて] を選択します。 検索ボックスに「liquid」と入力します。

  5. [アクション] 一覧から、使用する Liquid アクションを選択します。

    この例では、[Transform JSON to JSON](JSON を JSON に変換) という名前のアクションを引き続き使用します。

    Liquid アクションが選択された重量課金ワークフロー デザイナーを示すスクリーンショット。

  6. アクションの [コンテンツ] プロパティで、次の手順に従って、変換するトリガーまたは前のアクションからの JSON 出力を指定します。

    1. [コンテンツ] ボックス内をクリックして、動的コンテンツ リストを表示します。

    2. 動的コンテンツの一覧から、変換する JSON データを選択します。

      この例では、動的コンテンツの一覧の [HTTP 要求の受信時] で、トリガーからの本文コンテンツ出力を表す Body トークンを選択します。

      従量課金ワークフロー、Liquid アクションの [コンテンツ] プロパティ、開いている動的コンテンツ リスト、

  7. [マップ] リストから、Liquid テンプレートを選択します。

    この例では、JsonToJsonTemplate という名前のテンプレートを使用して続行します。

    従量課金ワークフロー、Liquid アクションの [マップ] プロパティ、選択されたテンプレートを示すスクリーンショット。

    Note

    マップ リストが空の場合、ロジック アプリ リソースが統合アカウントにリンクされていないか、統合アカウントにマップ ファイルが含まれていません。

    完了したアクションは、以下の例のようになります。

    完了した [Transform JSON to JSON]\(JSON を JSON に変換\) アクションを含む従量課金ワークフローを示すスクリーンショット。

  8. ワークフローを保存します。 デザイナーのツール バーで、 [保存] を選択します。

ワークフローのテスト

  1. Postman などのツールと POST メソッドを使用して、要求トリガーの URL (この URL は、要求トリガーの HTTP POST URL プロパティに表示されます) に呼び出しを送信し、変換する JSON 入力を含めます。次に例を示します。

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  2. ワークフローの実行が完了したら、ワークフローの実行履歴に移動し、 [JSON を JSON に変換] アクションの入力と出力を調べます。次に例を示します。

    出力例を示すスクリーンショット。

その他の Liquid 変換

Liquid を使用して他の変換を実行することができます。次に例を示します。

JSON からテキストへの変換

次の Liquid テンプレートは、JSON からテキストへの変換の例を示しています。

{{content.firstName | Append: ' ' | Append: content.lastName}}

次の例は、サンプルの入力と出力を示しています。

JSON からテキストへの変換の出力例を示すスクリーンショット。

XML から JSON への変換

次の Liquid テンプレートは、XML から JSON への変換の例を示しています。

[{% JSONArrayFor item in content -%}
      {{item}}
  {% endJSONArrayFor -%}]

JSONArrayFor ループは、XML 入力用のカスタム ループ機構です。これにより、末尾のコンマを回避する JSON ペイロードを作成できます。 また、このカスタム ループ機構の where 条件では、他の Liquid フィルターのように要素の値ではなく、XML 要素の名前が比較に使用されます。 詳細については、「set-body ポリシーの詳細情報」の「もののコレクション」を参照してください。

次の例は、サンプルの入力と出力を示しています。

XML から JSON への変換の出力例を示すスクリーンショット。

XML からテキストへの変換

次の Liquid テンプレートは、XML からテキストへの変換の例を示しています。

{{content.firstName | Append: ' ' | Append: content.lastName}}

次の例は、サンプルの入力と出力を示しています。

XML からテキストへの変換の出力例を示すスクリーンショット。

Liquid テンプレートに関する考慮事項

  • Liquid テンプレートは、Azure Logic Apps におけるマップのファイル サイズ制限に従います。

  • [Transform JSON to JSON](JSON を JSON に変換) アクションは、Liquid の DotLiquid 実装に従います。 この実装は、Liquid の Shopify 実装からの .NET Framework へのポートであり、特定のケースで異なります。

    次の一覧では、既知の違いについて説明します。

    • [Transform JSON to JSON](JSON を JSON に変換 ) アクションでは、JSON、XML、HTML などを含む文字列がネイティブに出力されます。 この Liquid アクションは、Liquid テンプレートから予期されるテキスト出力が JSON 文字列であることだけを示します。 このアクションは、入力を JSON オブジェクトとして解析し、Liquid が JSON 構造を解釈できるようにラッパーを適用することをロジック アプリに指示します。 変換後、アクションは、Liquid からのテキスト出力を解析して JSON に戻すようにロジック アプリに指示します。

      DotLiquid では JSON はネイティブに認識されないため、バックスラッシュ文字 (\) とその他の予約済み JSON 文字を必ずエスケープしてください。

    • テンプレートで Liquid フィルターが使用されている場合は、"文の先頭文字の大文字化" が使用されている DotLiquid と C# の名前付け規則に従っていることを確認してください。 すべての Liquid 変換で、テンプレート内のフィルター名でも文の先頭文字の大文字化が使用されていることを確認してください。 そうしないと、フィルターが機能しません。

      たとえば、replace フィルターを使用する場合は、replace ではなく Replace を使用します。 DotLiquid オンラインで例を試してみる場合も、同じ規則が適用されます。 詳細については、Shopify Liquid フィルターDotLiquid Liquid フィルターに関するページを参照してください。 Shopify の仕様には、各フィルターの例が含まれているため、比較のために、DotLiquid をオンラインで試すページでそれらの例を試してみることができます。

    • 現在、Shopify 拡張機能フィルターの json フィルターは DotLiquid では実装されていません。 通常は、このフィルターを使用して、JSON 文字列解析用のテキスト出力を準備できますが、代わりに Replace フィルターを使用する必要があります。

    • DotLiquid 実装の標準の Replace フィルターでは、正規表現 (RegEx) による照合が使用され、Shopify 実装では、単純な文字列の照合が使用されます。 両方の実装は、RegEx の予約文字、またはエスケープ文字を照合パラメーターで使用するまでは、同様に動作するように見えます。

      たとえば、RegEx の予約バックスラッシュ (\) エスケープ文字をエスケープするには、| Replace: '\', '\\' ではなく | Replace: '\\', '\\' を使用します。 次の例では、バックスラッシュ文字をエスケープしようとしたときに、Replace フィルターの動作がどのように異なるかを示します。 次の場合は正しく動作します。

      { "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\\', '\\' | Replace: '"', '\"'}}"}

      この結果は次のようになります。

      { "SampleText": "The quick brown fox \"jumped\" over the sleeping dog\\\\"}

      次の場合は失敗します。

      { "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\', '\\' | Replace: '"', '\"'}}"}

      このようなエラーになります。

      { "SampleText": "Liquid error: parsing "\" - Illegal \ at end of pattern."}

      詳細については、Replace 標準フィルターでの RegEx パターン マッチングの使用に関する記事を参照してください。

    • DotLiquid 実装Sort フィルターは、配列またはコレクション内の項目をプロパティによって並べ替えますが、次のような違いがあります。

次のステップ