Transformer du code JSON et XML en utilisant des modèles Liquid en tant que mappages dans Azure Logic Apps

S’applique à : Azure Logic Apps (Consommation + Standard)

Lorsque vous souhaitez effectuer des transformations de JSON de base dans vos flux de travail d’application logique, vous pouvez utiliser des opérations de données intégrées, telles que les actions Composer ou Analyser JSON. Toutefois, certains scénarios peuvent nécessiter des transformations avancées et complexes incluant des éléments tels que des itérations, des flux de contrôle et des variables. Pour les transformations de JSON en JSON, de JSON en texte, de XML en JSON ou de XML en texte, vous pouvez créer un modèle décrivant le mappage ou la transformation requis à l’aide du langage de modèle open source Liquid. Vous pouvez sélectionner ce modèle lorsque vous ajoutez une action intégrée Liquid à votre flux de travail. Vous pouvez utiliser des actions Liquid dans des flux de travail d’application logique Consommation multi-locataire et des flux de travail d’application logique Standard monolocataire.

Bien qu’aucun déclencheur Liquid ne soit disponible, vous pouvez utiliser n’importe quel déclencheur ou action pour alimenter le contenu JSON ou XML source dans votre flux de travail. Par exemple, vous pouvez utiliser un déclencheur de connecteur intégré, un déclencheur de connecteur géré ou hébergé par Azure disponible pour Azure Logic Apps, voire une autre application.

Cet article explique comment accomplir les tâches suivantes :

  • Créez un modèle Liquid.
  • Chargez le modèle dans votre compte d’intégration pour les flux de travail d’application logique Consommation, ou dans votre ressource d’application logique Standard afin de l’utiliser dans n’importe quel flux de travail enfant.
  • Ajoutez une action Liquid à votre flux de travail.
  • Sélectionnez le modèle en tant que mappage que vous souhaitez utiliser.

Pour plus d’informations, consultez la documentation suivante :

Prérequis

  • Un compte et un abonnement Azure. Si vous n’avez pas encore d’abonnement, vous pouvez vous inscrire pour obtenir un compte Azure gratuitement.

  • Ressource et flux de travail de votre application logique. Les opérations Liquid n’ayant pas de déclencheurs disponibles, votre flux de travail doit inclure au minimum un déclencheur. Pour plus d’informations, consultez la documentation suivante :

  • Selon que vous travaillez sur un flux de travail d’application logique Consommation ou Standard, vous aurez besoin d’une ressource de compte d’intégration. En règle générale, vous avez besoin de cette ressource lorsque vous souhaitez définir et stocker des artefacts à utiliser dans des flux de travail d’intégration d’entreprise et B2B.

    Important

    Pour opérer ensemble, votre compte d’intégration et votre ressource d’application logique doivent exister dans le même abonnement et la même région Azure.

    • Si vous travaillez sur un flux de travail d’application logique Consommation, votre compte d’intégration nécessite un lien vers votre ressource d’application logique.

    • Si vous travaillez sur un flux de travail d’application logique Standard, vous pouvez lier votre compte d’intégration à votre ressource d’application logique, charger des mappages directement dans votre ressource d’application logique, ou les deux, en fonction des scénarios suivants :

      • Si vous disposez déjà d’un compte d’intégration avec les artefacts dont vous avez besoin ou que vous souhaitez utiliser, vous pouvez lier le compte d’intégration à plusieurs ressources d’application logique Standard dans lesquelles vous souhaitez utiliser les artefacts. De cette façon, vous n’avez pas besoin de charger des mappages dans chaque application logique individuelle. Pour plus d’informations, consultez Lier votre ressource d’application logique à votre compte d’intégration.

      • Le connecteur intégré Liquid vous permet de sélectionner un mappage que vous avez précédemment chargé dans votre ressource d’application logique ou dans un compte d’intégration lié, mais pas les deux. Vous pouvez ensuite utiliser ces artefacts dans tous les flux de travail enfants au sein de la même ressource d’application logique.

      Par conséquent, si vous n’avez pas ou n’avez pas besoin de compte d’intégration, vous pouvez utiliser l’option de chargement. Sinon, vous pouvez utiliser l’option de liaison. Quoi qu’il en soit, vous pouvez utiliser ces artefacts dans tous les flux de travail enfants au sein de la même ressource d’application logique.

  • Connaissances de base sur le langage de gabarit Liquid. Les Applications logiques Azure utilisent DotLiquid 2.0.361.

    Notes

    L’action Liquid nommée Transformer JSON en JSON suit l’implémentation DotLiquid pour Liquid, qui diffère dans des cas spécifiques de l’implémentation Shopify pour Liquid. Pour plus d’informations, consultez Considérations relatives aux modèles Liquid.

  • Installez ou utilisez un outil capable d’envoyer des requêtes HTTP pour tester votre solution, par exemple :

    Attention

    Dans les scénarios comprenant des données sensibles, comme des informations d’identification, des secrets, des jetons d’accès, des clés API et d’autres informations similaires, veillez à utiliser un outil qui protège vos données avec les fonctionnalités de sécurité nécessaires, qui fonctionne en mode hors connexion ou localement, qui ne synchronise pas vos données avec le cloud, et qui ne vous impose pas de vous connecter à un compte en ligne. Vous réduirez ainsi les risques liés à l’exposition de données sensibles au public.

Étape 1 : Créer le modèle

Avant de pouvoir effectuer une transformation Liquid dans votre flux de travail d’application logique, vous devez créer un modèle Liquid qui définit le mappage souhaité.

  1. Créez le modèle Liquid à utiliser comme mappage pour la transformation de code JSON. Vous pouvez utiliser l’outil d’édition de votre choix.

    L’exemple de transformation de JSON en JSON présenté dans cet article utilise l’exemple de modèle Liquid suivant :

    {%- 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. Enregistrez le modèle en utilisant l’extension de fichier (.liquid) de modèle Liquid. Cet exemple utilise le fichier SimpleJsonToJsonTemplate.liquid.

Étape 2 : Charger le modèle Liquid

Après avoir créé votre modèle Liquid, vous devez le charger en fonction du scénario suivant :

Charger le modèle dans le compte d’intégration

  1. Dans le portail Azure connectez-vous avec les informations d’identification de votre compte Azure.

  2. Dans la zone de recherche du portail Azure, entrez integration accounts, puis sélectionnez Integration accounts.

    Capture d’écran montrant la zone de recherche du portail Azure avec l’entrée « integration accounts » et l’option « Integration accounts » sélectionnée.

  3. Recherchez et sélectionnez votre compte d’intégration.

    Capture d’écran montrant le volet des comptes d’intégration (integration accounts) avec un compte d’intégration sélectionné.

  4. Dans le menu de navigation du compte d’intégration, sous Paramètres, sélectionnez Mappages.

    Capture d’écran montrant le menu de navigation d’un compte d’intégration avec « Mappages » sélectionné.

  5. Dans le volet Mappages, sélectionnez Ajouter. Fournissez les informations suivantes concernant votre mappage :

    Propriété Valeur Description
    Nom JsonToJsonTemplate Nom de votre mappage (« JsontoJsonTemplate » dans cet exemple)
    Type de mappage Liquid Type de votre mappage. Pour une transformation de JSON en JSON, vous devez sélectionner Liquid.
    Map SimpleJsonToJsonTemplate.liquid Fichier de modèle ou de mappage Liquid existant à utiliser pour la transformation (« SimpleJsonToJsonTemplate.liquid » dans cet exemple). Pour trouver ce fichier, vous pouvez utiliser le sélecteur de fichiers. Pour connaître les limites de taille qui s'appliquent aux mappages, consultez Limites et configuration.

    Capture d’écran montrant le volet « Add Map » (Ajouter un mappage) avec un nouveau modèle chargé.

Charger le modèle dans l’application logique Standard

  1. Dans le portail Azure, recherchez et ouvrez votre ressource d’application logique. Assurez-vous que vous êtes au niveau ressource, et non au niveau flux de travail.

  2. Dans le menu de navigation de votre ressource d’application logique, sous Artefacts, sélectionnez Mappages.

  3. Dans la barre d’outils du volet Mappages, sélectionnez Ajouter.

  4. Dans le volet Ajouter un mappage, fournissez les informations suivantes concernant votre modèle :

    Propriété Valeur Description
    Nom JsonToJsonTemplate Nom de votre mappage (« JsontoJsonTemplate » dans cet exemple)
    Type de mappage Liquid Type de votre mappage. Pour une transformation de JSON en JSON, vous devez sélectionner Liquid.
    Map SimpleJsonToJsonTemplate.liquid Fichier de modèle ou de mappage Liquid existant à utiliser pour la transformation (« SimpleJsonToJsonTemplate.liquid » dans cet exemple). Pour trouver ce fichier, vous pouvez utiliser le sélecteur de fichiers. Pour connaître les limites de taille qui s'appliquent aux mappages, consultez Limites et configuration.
  5. Quand vous avez terminé, sélectionnez OK.

    Une fois que le chargement de votre fichier de mappage est terminé, le mappage s’affiche dans la liste Mappages. Sur la page Vue d’ensemble de votre compte d’intégration, sousArtefacts, s’affiche également votre mappage téléchargé.

Étape 3 : Ajouter l’action de transformation Liquid

Les étapes suivantes montrent comment ajouter une action de transformation Liquid pour des flux de travail d’application logique Consommation et Standard.

  1. Dans le portail Azure, ouvrez votre flux de travail d’application logique dans le concepteur si ce n’est déjà fait.

  2. Si votre flux de travail n’a pas de déclencheur ou d’autres actions dont votre flux de travail a besoin, commencez par ajouter ces opérations. Les opérations Liquid n’ont pas de déclencheurs disponibles.

    Cet exemple continue avec le déclencheur de Requête nommé Lorsqu'une requête HTTP est reçue.

  3. Dans le concepteur de flux de travail, sous l’étape à laquelle vous souhaitez ajouter l’action Liquid, sélectionnez Nouvelle étape.

  4. Sous la zone de recherche Choisir une opération, sélectionnez Toutes. Dans la zone de recherche, entrez liquid.

  5. Dans la liste d’actions, sélectionnez l’action Liquid que vous souhaitez utiliser.

    Cet exemple continue d’utiliser l’action nommée Transformer JSON en JSON.

    Capture d’écran montrant le concepteur de flux de travail Consommation avec une action Liquid sélectionnée.

  6. Dans la propriété Contenu de l’action, fournissez la sortie JSON du déclencheur ou une action précédente que vous souhaitez transformer en suivant ces étapes.

    1. Cliquez dans la zone Contenu pour afficher la liste du contenu dynamique.

    2. Dans la liste de contenu dynamique, sélectionnez les données JSON que vous souhaitez transformer.

      Pour cet exemple, dans la liste de contenu dynamique, sous Lors de la réception d’une requête HTTP, sélectionnez le jeton Body qui représente la sortie du déclencheur avec le contenu du corps.

      Capture d’écran montrant un flux de travail Consommation, avec la propriété « Content » (Contenu) de l’action Liquid, une liste de contenu dynamique ouverte, et le jeton « Body » sélectionné.

  7. Dans la liste Carte, sélectionnez votre modèle Liquid.

    Cet exemple continue avec le modèle nommé JsonToJsonTemplate.

    Capture d’écran montrant un flux de travail Consommation, avec la propriété « Content » (Contenu) de l’action Liquid et le modèle sélectionné.

    Notes

    Si la liste des cartes est vide, soit votre ressource d’application logique n’est pas liée à votre compte d’intégration ou votre compte d’intégration ne contient aucun fichier de carte.

    Lorsque vous avez terminé, l’action ressemble à l’exemple suivant :

    Capture d’écran montrant un flux de travail Consommation avec l’action « Transformer JSON en JSON » terminée.

  8. Enregistrez votre flux de travail. Dans la barre d’outils du Concepteur, sélectionnez Enregistrer.

Tester votre workflow

Pour déclencher votre workflow, suivez ces étapes :

  1. Dans le déclencheur Requête, recherchez la propriété URL HTTP POST et copiez l’URL.

  2. Ouvrez votre outil de requête HTTP et utilisez ses instructions pour envoyer une requête HTTP à l’URL copiée, y compris la méthode attendue par le déclencheur Requête.

    Cet exemple utilise la méthode POST avec l’URL.

  3. Incluez l’entrée JSON à transformer, par exemple :

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  4. Une fois l’exécution de votre workflow terminée, accédez à l’historique des exécutions du workflow, puis examinez les entrées et sorties de l’action Transformer de JSON en JSON, par exemple :

    Capture d’écran montrant un exemple de sortie.

Autres transformations Liquid

Vous pouvez utiliser Liquid pour effectuer d’autres transformations, par exemple :

Transformer du JSON en texte

Le modèle Liquid suivant présente un exemple de transformation de JSON en texte :

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

L’exemple suivant présente les échantillons d’entrées et de sorties :

Capture d’écran montrant un exemple de sortie pour une transformation de JSON en texte.

Transformer du XML en JSON

Le modèle Liquid suivant présente un exemple de transformation de XML en JSON :

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

La boucle JSONArrayFor est un mécanisme de boucle personnalisé pour les entrées XML, qui permet de créer des charges utiles JSON sans virgule de fin. En outre, la condition where de ce mécanisme de boucle personnalisé utilise le nom de l’élément XML à des fins de comparaison, plutôt que la valeur de l’élément comme d’autres filtres Liquid. Pour plus d’informations, consultez une présentation approfondie de la stratégie set-body - collections d’éléments.

L’exemple suivant présente les échantillons d’entrées et de sorties :

Capture d’écran montrant un exemple de sortie pour une transformation de XML en JSON.

Transformer du XML en texte

Le modèle Liquid suivant présente un exemple de transformation de XML en texte :

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

L’exemple suivant présente les échantillons d’entrées et de sorties :

Capture d’écran montrant un exemple de sortie pour une transformation de XML en texte.

Considérations relatives aux modèles Liquid

  • Les modèles Liquid suivent les limites de taille de fichier pour les mappages dans Azure Logic Apps.

  • L’action Transformer JSON en JSON suit l’implémentation de DotLiquid pour Liquid. Cette implémentation est un port vers le .NET Framework à partir de l’implémentation Shopify pour Liquid et diffère dans des cas spécifiques.

    La liste suivante décrit les différences connues :

    • L’action Transformer JSON en JSON génère en mode natif une chaîne pouvant inclure du code JSON, XML, HTML, etc. L’action Liquid indique uniquement que la sortie de texte attendue du modèle Liquid est une chaîne JSON. L’action indique à votre application logique d’analyser l’entrée en tant qu’objet JSON et applique un wrapper afin que Liquid puisse interpréter la structure JSON. Après la transformation, l’action indique à votre application logique d’analyser la sortie de texte de Liquid en retour vers JSON.

      DotLiquid ne comprend pas de façon native le code JSON. Veillez donc à échapper la barre oblique inverse (\) et tout autre caractère JSON réservé.

    • Si votre modèle utilise des filtres Liquid, veillez à respecter les conventions de nommage DotLiquid et C#, qui utilisent la casse des phrases. Pour toutes les transformations Liquid, assurez-vous que les noms des filtres dans votre modèle utilisent également la casse des phrases. Sinon, les filtres ne fonctionneront pas.

      Par exemple, lorsque vous utilisez le filtre replace, utilisez Replace et non pas replace. La même règle s’applique si vous essayez des exemples sur le site d’essai en ligne de DotLiquid. Pour plus d’informations, consultez les filtres Shopify Liquid et les filtres DotLiquid Liquid. La spécification Shopify inclut des exemples pour chaque filtre. Ainsi, à des fins de comparaison, vous pouvez essayer ces exemples sur le site d’essai en ligne de DotLiquid.

    • Le filtre json des filtres d’extension Shopify est actuellement non implémenté dans DotLiquid. En règle générale, vous pouvez utiliser ce filtre pour préparer la sortie de texte pour l’analyse des chaînes JSON, mais vous devez utiliser le filtre Replace à la place.

    • Le filtre Replace standard dans l’implémentation DotLiquid utilise la correspondance d’expression régulière (RegEx), tandis que l’implémentation Shopify utilise la correspondance de chaîne simple. Les deux implémentations fonctionnent apparemment de la même façon jusqu’à ce que vous utilisiez un caractère RegEx réservé ou un caractère d’échappement dans le paramètre match.

      Par exemple, pour échapper le caractère d’échappement de barre oblique inverse RegEx réservé (\), utilisez | Replace: '\\', '\\' et non pas | Replace: '\', '\\'. Ces exemples montrent comment le filtre Replace se comporte différemment lorsque vous essayez d’échapper le caractère de barre oblique inverse. Cette version fonctionne correctement :

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

      Avec le résultat suivant :

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

      Tandis que cette version échoue :

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

      Avec cette erreur :

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

      Pour plus d’informations, consultez Replace standard filter uses RegEx pattern matching....

    • Le filtre Sort dans l’implémentation de DotLiquid trie les éléments d’un tableau ou d’une collection par propriété, mais avec les différences suivantes :

Étapes suivantes