Transformera JSON och XML med hjälp av Liquid-mallar som kartor i arbetsflöden med hjälp av Azure Logic Apps

Gäller för: Azure Logic Apps (Förbrukning + Standard)

När du vill utföra grundläggande JSON-transformeringar i dina logikapparbetsflöden kan du använda inbyggda dataåtgärder, till exempel åtgärden Skriv eller Parsa JSON . Vissa scenarier kan dock kräva avancerade och komplexa omvandlingar som omfattar element som iterationer, kontrollflöden och variabler. För omvandlingar mellan JSON till JSON, JSON till text, XML till JSON eller XML till text kan du skapa en mall som beskriver den mappning eller omvandling som krävs med hjälp av mallspråket Liquid med öppen källkod. Du kan välja den här mallen när du lägger till en inbyggd liquid-åtgärd i arbetsflödet. Du kan använda Liquid Actions i logikapparbetsflöden för flera klientorganisationer och standardarbetsflöden för standardlogikappar med en klientorganisation.

Även om inga Liquid-utlösare är tillgängliga kan du använda valfri utlösare eller åtgärd för att mata in JSON- eller XML-källinnehållet i arbetsflödet. Du kan till exempel använda en inbyggd anslutningsutlösare, en hanterad eller Azure-värdbaserad anslutningsutlösare som är tillgänglig för Azure Logic Apps eller till och med en annan app.

Den här artikeln visar hur du utför följande uppgifter:

  • Skapa en Liquid-mall.
  • Ladda upp mallen till ditt integrationskonto för arbetsflöden för förbrukningslogikapp eller till standardlogikappresursen för användning i ett underordnat arbetsflöde.
  • Lägg till en Liquid-åtgärd i arbetsflödet.
  • Välj mallen som den karta som du vill använda.

Mer information finns i följande dokumentation:

Förutsättningar

  • Ett Azure-konto och prenumeration. Om du inte har någon prenumeration kan du registrera ett kostnadsfritt Azure-konto.

  • Logikappens resurs och arbetsflöde. Flytande åtgärder har inga tillgängliga utlösare, så arbetsflödet måste innehålla en utlösare minimalt. Mer information finns i följande dokumentation:

  • Baserat på om du arbetar med ett arbetsflöde för förbrukning eller standardlogikapp behöver du en integrationskontoresurs. Vanligtvis behöver du den här resursen när du vill definiera och lagra artefakter för användning i företagsintegrering och B2B-arbetsflöden.

    Viktigt!

    För att fungera tillsammans måste både ditt integrationskonto och logikappresurs finnas i samma Azure-prenumeration och Azure-region.

    • Om du arbetar med ett arbetsflöde för förbrukningslogikappen kräver ditt integrationskonto en länk till logikappresursen.

    • Om du arbetar med ett standardarbetsflöde för logikappar kan du länka ditt integrationskonto till din logikappresurs, ladda upp kartor direkt till logikappresursen eller båda, baserat på följande scenarier:

      • Om du redan har ett integrationskonto med artefakterna som du behöver eller vill använda kan du länka integrationskontot till flera standardlogikappresurser där du vill använda artefakterna. På så sätt behöver du inte ladda upp kartor till varje enskild logikapp. Mer information finns i Länka logikappresursen till ditt integrationskonto.

      • Med den inbyggda liquid-anslutningsappen kan du välja en karta som du tidigare laddade upp till din logikappresurs eller till ett länkat integrationskonto, men inte båda. Du kan sedan använda dessa artefakter i alla underordnade arbetsflöden i samma logikappresurs.

      Så om du inte har eller behöver ett integrationskonto kan du använda uppladdningsalternativet. Annars kan du använda länkningsalternativet. Hur som helst kan du använda dessa artefakter i alla underordnade arbetsflöden i samma logikappresurs.

  • Grundläggande kunskaper om flytande mallspråk. Azure Logic Apps använder DotLiquid 2.0.361.

    Kommentar

    Åtgärden Liquid med namnet Transform JSON to JSON följer DotLiquid-implementeringen för Liquid, som i vissa fall skiljer sig från Shopify-implementeringen för Liquid. Mer information finns i Överväganden för flytande mallar.

Steg 1: Skapa mallen

Innan du kan utföra en Liquid-transformering i logikappens arbetsflöde måste du först skapa en Liquid-mall som definierar den mappning du vill ha.

  1. Skapa den Liquid-mall som du använder som en karta för JSON-omvandlingen. Du kan använda valfritt redigeringsverktyg som du vill.

    Exempel på JSON-till-JSON-transformering i den här artikeln använder följande exempel på liquid-mall:

    {%- 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. Spara mallen med filnamnstillägget Liquid-mallen (.liquid). I det här exemplet används SimpleJsonToJsonTemplate.liquid.

Steg 2: Ladda upp liquid-mall

När du har skapat din Liquid-mall måste du nu ladda upp mallen baserat på följande scenario:

Ladda upp mall till integrationskonto

  1. Logga in med dina autentiseringsuppgifter för Azure-kontot i Azure-portalen.

  2. I sökrutan i Azure-portalen anger du integrationskonton och väljer Integreringskonton.

    Screenshot showing the Azure portal search box with

  3. Leta upp och välj ditt integrationskonto.

    Screenshot showing integration accounts pane with integration account selected.

  4. Välj Kartor under Inställningar på integrationskontots navigeringsmeny.

    Screenshot showing integration account navigation menu with

  5. I fönstret Kartor väljer du Lägg till. Ange följande information om kartan:

    Property Värde Beskrivning
    Namn JsonToJsonTemplate Namnet på kartan, som är "JsonToJsonTemplate" i det här exemplet
    Karttyp Flytande Typ av karta. För JSON till JSON-transformering måste du välja Liquid.
    Map SimpleJsonToJsonTemplate.liquid En befintlig Liquid-mall eller mappningsfil som ska användas för transformering, som är "SimpleJsonToJsonTemplate.liquid" i det här exemplet. Om du vill hitta den här filen kan du använda filväljaren. Mer information om gränser för kartstorlek finns i Gränser och konfiguration.

    Screenshot showing

Ladda upp mallen till standardlogikappen

  1. Leta upp och öppna logikappresursen i Azure-portalen. Kontrollera att du är på resursnivå, inte på arbetsflödesnivå.

  2. På logikappresursens navigeringsmeny går du till Artefakter och väljer Kartor.

  3. I verktygsfältet Kartor fönster väljer du Lägg till.

  4. I fönstret Lägg till karta anger du följande information om mallen:

    Property Värde Beskrivning
    Namn JsonToJsonTemplate Namnet på kartan, som är "JsonToJsonTemplate" i det här exemplet
    Karttyp Flytande Typ av karta. För JSON till JSON-transformering måste du välja Liquid.
    Map SimpleJsonToJsonTemplate.liquid En befintlig Liquid-mall eller mappningsfil som ska användas för transformering, som är "SimpleJsonToJsonTemplate.liquid" i det här exemplet. Om du vill hitta den här filen kan du använda filväljaren. Mer information om gränser för kartstorlek finns i Gränser och konfiguration.
  5. När du är klar väljer du OK.

    När kartfilen har laddats upp visas kartan i listan Kartor. På integrationskontots översiktssida, under Artefakter, visas även den uppladdade kartan.

Steg 3: Lägg till åtgärden Flytande transformering

Följande steg visar hur du lägger till en liquid transformation-åtgärd för arbetsflöden för förbrukning och standardlogikapp.

  1. Öppna arbetsflödet för logikappen i designern i Azure-portalen, om det inte redan är öppet.

  2. Om arbetsflödet inte har någon utlösare eller andra åtgärder som arbetsflödet behöver lägger du först till dessa åtgärder. Flytande åtgärder har inga tillgängliga utlösare.

    Det här exemplet fortsätter med utlösaren Förfrågning med namnet När en HTTP-begäran tas emot.

  3. I arbetsflödesdesignern går du till steget där du vill lägga till åtgärden Liquid och väljer Nytt steg.

  4. Under sökrutan Välj en åtgärd väljer du Alla. I sökrutan anger du vätska.

  5. I åtgärdslistan väljer du den liquid-åtgärd som du vill använda.

    Det här exemplet fortsätter att använda åtgärden Transform JSON to JSON (Transformera JSON till JSON).

    Screenshot showing Consumption workflow designer with a Liquid action selected.

  6. I åtgärdens innehållsegenskap anger du JSON-utdata från utlösaren eller en tidigare åtgärd som du vill transformera genom att följa dessa steg.

    1. Klicka i rutan Innehåll så att listan med dynamiskt innehåll visas.

    2. I listan med dynamiskt innehåll väljer du de JSON-data som du vill transformera.

      I det här exemplet går du till listan med dynamiskt innehåll under När en HTTP-begäran tas emot väljer du brödtexttoken, som representerar brödtextinnehållets utdata från utlösaren.

      Screenshot showing Consumption workflow, Liquid action's

  7. I listan Karta väljer du din Liquid-mall.

    Det här exemplet fortsätter med mallen med namnet JsonToJsonTemplate.

    Screenshot showing Consumption workflow, Liquid action's

    Kommentar

    Om mappningslistan är tom är logikappresursen inte länkad till ditt integrationskonto eller så innehåller inte ditt integrationskonto några kartfiler.

    När du är klar ser åtgärden ut ungefär som i följande exempel:

    Screenshot showing Consumption workflow with finished

  8. Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.

Testa arbetsflödet

  1. Genom att använda Postman eller ett liknande verktyg och POST metoden skickar du ett anrop till url:en för utlösaren för begäran, som visas i egenskapen HTTP POST URL för begärandeutlösare och inkluderar JSON-indata för transformering, till exempel:

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  2. När arbetsflödet har körts går du till arbetsflödets körningshistorik och undersöker transformera JSON till JSON-åtgärdens indata och utdata, till exempel:

    Screenshot showing example output.

Andra flytande omvandlingar

Du kan använda Liquid för att utföra andra transformeringar, till exempel:

Transformera JSON till text

Följande Liquid-mall visar en exempeltransformering för JSON till text:

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

I följande exempel visas exempelindata och utdata:

Screenshot showing example output for JSON to text transformation.

Transformera XML till JSON

Följande Liquid-mall visar en exempeltransformering för XML till JSON:

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

Loopen JSONArrayFor är en anpassad loopmekanism för XML-indata så att du kan skapa JSON-nyttolaster som undviker ett avslutande kommatecken. Villkoret för den where här anpassade loopningsmekanismen använder också XML-elementets namn för jämförelse, i stället för elementets värde som andra Liquid-filter. Mer information finns i Djupdykning i set-body Policy – samlingar av saker.

I följande exempel visas exempelindata och utdata:

Screenshot showing example output for XML to JSON transformation.

Transformera XML till text

Följande Liquid-mall visar en exempeltransformering för XML till text:

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

I följande exempel visas exempelindata och utdata:

Screenshot showing example output for XML to text transformation.

Överväganden för flytande mallar

  • Flytande mallar följer filstorleksgränserna för kartor i Azure Logic Apps.

  • Åtgärden Transformera JSON till JSON följer DotLiquid-implementeringen för Liquid. Den här implementeringen är en port till .NET Framework från Shopify-implementeringen för Liquid och skiljer sig i specifika fall.

    I följande lista beskrivs de kända skillnaderna:

    • Åtgärden Transformera JSON till JSON matar in en sträng som kan innehålla JSON, XML, HTML och så vidare. Åtgärden Liquid anger bara att den förväntade textutdatan från Liquid-mallen är en JSON-sträng. Åtgärden instruerar logikappen att parsa indata som ett JSON-objekt och tillämpar en omslutning så att Liquid kan tolka JSON-strukturen. Efter omvandlingen instruerar åtgärden logikappen att parsa textutdata från Liquid tillbaka till JSON.

      DotLiquid förstår inte JSON internt, så se till att du slipper omvänt snedstreck (\) och andra reserverade JSON-tecken.

    • Om mallen använder Liquid-filter kontrollerar du att du följer namngivningskonventionerna DotLiquid och C# som använder meningshölje. För alla Liquid-transformeringar kontrollerar du att filternamnen i mallen också använder meningshölje. Annars fungerar inte filtren.

      När du till exempel använder replace filtret använder du Replace, inte replace. Samma regel gäller om du provar exempel på DotLiquid online. Mer information finns i Shopify Liquid-filter och DotLiquid Liquid-filter. Shopify-specifikationen innehåller exempel för varje filter, så för jämförelse kan du prova dessa exempel på DotLiquid – Prova online.

    • json Filtret från Shopify-tilläggsfiltren implementeras för närvarande inte i DotLiquid. Vanligtvis kan du använda det här filtret för att förbereda textutdata för JSON-strängparsning, men i stället måste du använda Replace filtret i stället.

    • Standardfiltret i DotLiquid-implementeringen använder regex-matchning (regular expression), medan Shopify-implementeringen använder enkel strängmatchning.Replace Båda implementeringarna verkar fungera på samma sätt tills du använder ett RegEx-reserverat tecken eller ett escape-tecken i matchningsparametern.

      Om du till exempel vill undvika det RegEx-reserverade omvänt snedstreck (\) escape-tecknet använder du | Replace: '\\', '\\', och inte | Replace: '\', '\\'. De här exemplen Replace visar hur filtret beter sig annorlunda när du försöker undvika omvänt snedstreck. Även om den här versionen fungerar:

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

      Med det här resultatet:

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

      Den här versionen misslyckas:

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

      Med det här felet:

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

      Mer information finns i Ersätt standardfilter som använder RegEx-mönstermatchning....

    • Sort Filtret i DotLiquid-implementeringen sorterar objekt i en matris eller samling efter egenskap, men med dessa skillnader:

Nästa steg