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:
- Utföra dataåtgärder i Azure Logic Apps
- Flytande mallspråk med öppen källkod
- Förbrukning jämfört med standardlogikappar
- Inbyggda anslutningsappar för integrationskonto
- Översikt över inbyggda anslutningsappar för Azure Logic Apps
- Översikt över hanterade eller Azure-värdbaserade anslutningsappar för Azure Logic Apps och hanterade eller Azure-värdbaserade anslutningsappar i Azure Logic Apps
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.
Installera eller använd ett verktyg som kan skicka HTTP-begäranden för att testa din lösning, till exempel:
- Visual Studio Code med ett tillägg från Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – verktyg för nätverkskonsol
- Bruno
- hårlock
Varning
För scenarier där du har känsliga data, till exempel autentiseringsuppgifter, hemligheter, åtkomsttoken, API-nycklar och annan liknande information, bör du använda ett verktyg som skyddar dina data med nödvändiga säkerhetsfunktioner, fungerar offline eller lokalt, inte synkroniserar dina data till molnet och inte kräver att du loggar in på ett onlinekonto. På så sätt minskar du risken för att exponera känsliga data för allmänheten.
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.
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 -%} ] }
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:
Om du arbetar med ett arbetsflöde för förbrukningslogikapp laddar du upp mallen till ditt integrationskonto.
Om du arbetar med ett standardarbetsflöde för logikappar kan du ladda upp mallen till ditt integrationskonto eller ladda upp mallen till logikappresursen.
Ladda upp mall till integrationskonto
Logga in med dina autentiseringsuppgifter för Azure-kontot i Azure-portalen.
I sökrutan i Azure-portalen anger du integrationskonton och väljer Integreringskonton.
Leta upp och välj ditt integrationskonto.
På integrationskontots navigeringsmeny går du till Inställningar och väljer Kartor.
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 Vätska 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.
Ladda upp mallen till standardlogikappen
Leta upp och öppna logikappresursen i Azure-portalen. Kontrollera att du är på resursnivå, inte på arbetsflödesnivå.
På logikappresursens navigeringsmeny går du till Artefakter och väljer Kartor.
Välj Lägg till i verktygsfältet i fönstret Kartor.
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 Vätska 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. 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.
Öppna arbetsflödet för logikappen i designern i Azure-portalen, om det inte redan är öppet.
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.
I arbetsflödesdesignern går du till steget där du vill lägga till åtgärden Liquid och väljer Nytt steg.
Under sökrutan Välj en åtgärd väljer du Alla. I sökrutan anger du vätska.
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).
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.
Klicka i rutan Innehåll så att listan med dynamiskt innehåll visas.
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.
I listan Karta väljer du din Liquid-mall.
Det här exemplet fortsätter med mallen med namnet JsonToJsonTemplate.
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:
Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.
Testa arbetsflödet
Följ dessa steg för att utlösa arbetsflödet:
I utlösaren Förfrågning letar du reda på egenskapen HTTP POST URL och kopierar URL:en.
Öppna http-begärandeverktyget och använd dess instruktioner för att skicka en HTTP-begäran till den kopierade URL:en, inklusive den metod som begärandeutlösaren förväntar sig.
I det
POST
här exemplet används metoden med URL:en.Inkludera JSON-indata för transformering, till exempel:
{ "devices": "Surface, Mobile, Desktop computer, Monitors", "firstName": "Dean", "lastName": "Ledet", "phone": "(111)0001111" }
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:
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:
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:
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:
Ö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 duReplace
, intereplace
. 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ändaReplace
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 exemplenReplace
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:Följer Shopifys sort_natural beteende, inte Shopifys sorteringsbeteende.
Sorterar endast i sträng-alfanumerisk ordning. Mer information finns i Numerisk sortering.
Använder skiftlägeskänslig ordning, inte skiftlägeskänslig ordning. Mer information finns i Sorteringsfilter följer inte höljebeteendet från Shopifys specifikation.