JSON en XML transformeren met behulp van Liquid-sjablonen als toewijzingen in werkstromen met behulp van Azure Logic Apps
Van toepassing op: Azure Logic Apps (Verbruik + Standard)
Wanneer u eenvoudige JSON-transformaties wilt uitvoeren in uw werkstromen voor logische apps, kunt u ingebouwde gegevensbewerkingen gebruiken, zoals de actie Opstellen of JSON parseren. Voor sommige scenario's zijn echter mogelijk geavanceerde en complexe transformaties vereist die elementen bevatten, zoals iteraties, controlestromen en variabelen. Voor transformaties tussen JSON en JSON, JSON naar tekst, XML naar JSON of XML naar tekst kunt u een sjabloon maken die de vereiste toewijzing of transformatie beschrijft met behulp van de opensource-sjabloontaal Liquid. U kunt deze sjabloon selecteren wanneer u een ingebouwde Liquid-actie toevoegt aan uw werkstroom. U kunt Liquid-acties gebruiken in werkstromen voor logische apps met meerdere tenants en werkstromen voor logische apps met één tenant.
Hoewel er geen Liquid-triggers beschikbaar zijn, kunt u elke trigger of actie gebruiken om de bron-JSON- of XML-inhoud in uw werkstroom in te voeren. U kunt bijvoorbeeld een ingebouwde connectortrigger, een beheerde of door Azure gehoste connectortrigger gebruiken die beschikbaar is voor Azure Logic Apps of zelfs een andere app.
In dit artikel wordt beschreven hoe u de volgende taken uitvoert:
- Maak een Liquid-sjabloon.
- Upload de sjabloon naar uw integratieaccount voor werkstromen voor logische apps voor verbruik of naar de resource van de standaard logische app voor gebruik in een onderliggende werkstroom.
- Voeg een Liquid-actie toe aan uw werkstroom.
- Selecteer de sjabloon als de kaart die u wilt gebruiken.
Raadpleeg de volgende documentatie voor meer informatie:
- Gegevensbewerkingen uitvoeren in Azure Logic Apps
- Taal voor liquide opensource-sjablonen
- Verbruik versus standaard logische apps
- Ingebouwde connectors voor integratieaccounts
- Overzicht van ingebouwde connectors voor Azure Logic Apps
- Overzicht van beheerde of door Azure gehoste connectors voor Azure Logic Apps en beheerde of door Azure gehoste connectors in Azure Logic Apps
Vereisten
Een Azure-account en -abonnement. Als u nog geen abonnement hebt, meld u dan aan voor een gratis Azure-account.
De resource en werkstroom van uw logische app. Liquide bewerkingen hebben geen triggers beschikbaar, dus uw werkstroom moet minimaal een trigger bevatten. Raadpleeg de volgende documentatie voor meer informatie:
Op basis van of u werkt aan een werkstroom voor een verbruiks- of Standard-logische app, hebt u een integratieaccountresource nodig. Normaal gesproken hebt u deze resource nodig wanneer u artefacten wilt definiëren en opslaan voor gebruik in bedrijfsintegratie en B2B-werkstromen.
Belangrijk
Als u wilt samenwerken, moeten zowel uw integratieaccount als de resource van de logische app zich in hetzelfde Azure-abonnement en dezelfde Azure-regio bevinden.
Als u aan een werkstroom voor logische verbruiks-apps werkt, is voor uw integratieaccount een koppeling naar de resource van uw logische app vereist.
Als u aan een werkstroom voor een standaard logische app werkt, kunt u uw integratieaccount koppelen aan uw resource voor logische apps, kaarten rechtstreeks uploaden naar uw logische app-resource of beide, op basis van de volgende scenario's:
Als u al een integratieaccount hebt met de artefacten die u nodig hebt of wilt gebruiken, kunt u het integratieaccount koppelen aan meerdere resources van de logische standaard-app waar u de artefacten wilt gebruiken. Op die manier hoeft u geen kaarten te uploaden naar elke afzonderlijke logische app. Zie Uw logische app-resource koppelen aan uw integratieaccount voor meer informatie.
Met de ingebouwde Liquid-connector kunt u een kaart selecteren die u eerder hebt geüpload naar uw logische app-resource of naar een gekoppeld integratieaccount, maar niet beide. U kunt deze artefacten vervolgens gebruiken voor alle onderliggende werkstromen binnen dezelfde logische app-resource.
Als u dus geen integratieaccount hebt of nodig hebt, kunt u de optie uploaden gebruiken. Anders kunt u de koppelingsoptie gebruiken. In beide gevallen kunt u deze artefacten gebruiken voor alle onderliggende werkstromen binnen dezelfde logische app-resource.
Basiskennis van de liquid-sjabloontaal. Azure Logic Apps maakt gebruik van DotLiquid 2.0.361.
Notitie
De Liquid-actie genaamd Transform JSON naar JSON volgt de DotLiquid-implementatie voor Liquid, die verschilt in specifieke gevallen van de Shopify-implementatie voor Liquid. Zie Overwegingen voor Liquid-sjablonen voor meer informatie.
Installeer of gebruik een hulpprogramma waarmee HTTP-aanvragen kunnen worden verzonden om uw oplossing te testen, bijvoorbeeld:
- Visual Studio Code met een extensie van Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge - Hulpprogramma voor netwerkconsole
- Bruno
- curl
Let op
Voor scenario's waarin u gevoelige gegevens hebt, zoals referenties, geheimen, toegangstokens, API-sleutels en andere vergelijkbare informatie, moet u een hulpprogramma gebruiken waarmee uw gegevens worden beveiligd met de benodigde beveiligingsfuncties, offline of lokaal werken, uw gegevens niet worden gesynchroniseerd met de cloud en u zich niet hoeft aan te melden bij een onlineaccount. Op deze manier vermindert u het risico dat gevoelige gegevens openbaar worden gemaakt voor het publiek.
Stap 1: De sjabloon maken
Voordat u een Liquid-transformatie in uw werkstroom voor logische apps kunt uitvoeren, moet u eerst een Liquid-sjabloon maken waarmee de gewenste toewijzing wordt gedefinieerd.
Maak de Liquid-sjabloon die u gebruikt als een kaart voor de JSON-transformatie. U kunt elk gewenst bewerkingsprogramma gebruiken.
In het voorbeeld van JSON-naar-JSON-transformatie in dit artikel wordt de volgende liquid-voorbeeldsjabloon gebruikt:
{%- 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 -%} ] }
Sla de sjabloon op met behulp van de bestandsextensie Liquid-sjabloon (.liquid). In dit voorbeeld wordt SimpleJsonToJsonTemplate.liquid gebruikt.
Stap 2: Liquid-sjabloon uploaden
Nadat u uw Liquid-sjabloon hebt gemaakt, moet u de sjabloon nu uploaden op basis van het volgende scenario:
Als u aan een werkstroom voor logische verbruiks-apps werkt, uploadt u uw sjabloon naar uw integratieaccount.
Als u aan een werkstroom voor een standaard logische app werkt, kunt u uw sjabloon uploaden naar uw integratieaccount of uw sjabloon uploaden naar de resource van uw logische app.
Sjabloon uploaden naar integratieaccount
Meld u in Azure Portal aan met uw Azure-accountreferenties.
Voer in het zoekvak van Azure Portal integratieaccounts in en selecteer Integratieaccounts.
Zoek en selecteer uw integratieaccount.
Selecteer Kaarten in het navigatiemenu van het integratieaccount onder Instellingen.
Selecteer Toevoegen in het deelvenster Kaarten. Geef de volgende informatie op over uw kaart:
Eigenschappen Weergegeven als Beschrijving Naam JsonToJsonTemplate
De naam van uw kaart, die 'JsonToJsonTemplate' is in dit voorbeeld Kaarttype Vloeistof Het type voor uw kaart. Voor JSON-naar-JSON-transformatie moet u Liquid selecteren. Map SimpleJsonToJsonTemplate.liquid
Een bestaande Liquid-sjabloon of toewijzingsbestand dat moet worden gebruikt voor transformatie, dat in dit voorbeeld SimpleJsonToJsonTemplate.liquid is. Als u dit bestand wilt vinden, kunt u de bestandskiezer gebruiken. Zie Limieten en configuratie voor kaartgroottelimieten.
Sjabloon uploaden naar een standaard logische app
Zoek en open uw logische app-resource in Azure Portal. Zorg ervoor dat u zich op resourceniveau bevindt, niet het werkstroomniveau.
Selecteer Kaarten in het navigatiemenu van uw logische app-resource onder Artefacten.
Selecteer Toevoegen op de werkbalk Van het deelvenster Kaarten.
Geef in het deelvenster Kaart toevoegen de volgende informatie op over uw sjabloon:
Eigenschappen Weergegeven als Beschrijving Naam JsonToJsonTemplate
De naam van uw kaart, die 'JsonToJsonTemplate' is in dit voorbeeld Kaarttype Vloeistof Het type voor uw kaart. Voor JSON-naar-JSON-transformatie moet u Liquid selecteren. Map SimpleJsonToJsonTemplate.liquid
Een bestaande Liquid-sjabloon of toewijzingsbestand dat moet worden gebruikt voor transformatie, dat in dit voorbeeld SimpleJsonToJsonTemplate.liquid is. Als u dit bestand wilt vinden, kunt u de bestandskiezer gebruiken. Zie Limieten en configuratie voor kaartgroottelimieten. Als u gereed bent, selecteert u OK.
Nadat het kaartbestand is geüpload, wordt de kaart weergegeven in de lijst Kaarten . Op de overzichtspagina van uw integratieaccount, onder Artefacten, wordt de geüploade kaart ook weergegeven.
Stap 3: De actie Liquid-transformatie toevoegen
In de volgende stappen ziet u hoe u een liquide transformatieactie toevoegt voor werkstromen voor verbruiks- en standaardlogica-apps.
Open in Azure Portal uw werkstroom voor logische apps in de ontwerpfunctie, als deze nog niet is geopend.
Als uw werkstroom geen trigger of andere acties heeft die uw werkstroom nodig heeft, voegt u deze bewerkingen eerst toe. Liquide bewerkingen hebben geen triggers beschikbaar.
In dit voorbeeld wordt de aanvraagtrigger voortgezet met de naam Wanneer een HTTP-aanvraag wordt ontvangen.
Selecteer in de werkstroomontwerper onder de stap waar u de actie Liquid wilt toevoegen de optie Nieuwe stap.
Selecteer onder het zoekvak Kies een bewerking de optie Alle. Voer in het zoekvak vloeistof in.
Selecteer in de lijst met acties de actie Liquid die u wilt gebruiken.
In dit voorbeeld wordt de actie JSON transformeren naar JSON voortgezet.
Geef in de eigenschap Inhoud van de actie de JSON-uitvoer op van de trigger of een vorige actie die u wilt transformeren door deze stappen uit te voeren.
Klik in het vak Inhoud , zodat de lijst met dynamische inhoud wordt weergegeven.
Selecteer in de lijst met dynamische inhoud de JSON-gegevens die u wilt transformeren.
Voor dit voorbeeld selecteert u in de lijst met dynamische inhoud onder Wanneer een HTTP-aanvraag wordt ontvangen het hoofdteksttoken , dat de uitvoer van de hoofdtekst van de trigger vertegenwoordigt.
Selecteer uw Liquid-sjabloon in de lijst Kaart .
In dit voorbeeld wordt de sjabloon JsonToJsonTemplate gebruikt.
Notitie
Als de lijst met kaarten leeg is, is uw logische app-resource niet gekoppeld aan uw integratieaccount of bevat uw integratieaccount geen kaartbestanden.
Wanneer u klaar bent, ziet de actie eruit zoals in het volgende voorbeeld:
Sla uw werkstroom op. Selecteer in de werkbalk van de ontwerper Opslaan.
Uw werkstroom testen
Voer de volgende stappen uit om uw werkstroom te activeren:
Zoek in de aanvraagtrigger de EIGENSCHAP HTTP POST URL en kopieer de URL.
Open uw HTTP-aanvraagprogramma en gebruik de bijbehorende instructies om een HTTP-aanvraag naar de gekopieerde URL te verzenden, inclusief de methode die de aanvraagtrigger verwacht.
In dit voorbeeld wordt de
POST
methode met de URL gebruikt.Neem de JSON-invoer op die moet worden getransformeerd, bijvoorbeeld:
{ "devices": "Surface, Mobile, Desktop computer, Monitors", "firstName": "Dean", "lastName": "Ledet", "phone": "(111)0001111" }
Nadat de werkstroom is uitgevoerd, gaat u naar de uitvoeringsgeschiedenis van de werkstroom en bekijkt u de invoer en uitvoer van de transformatie-JSON-actie naar de invoer en uitvoer van de JSON-actie , bijvoorbeeld:
Andere liquide transformaties
U kunt Liquid gebruiken om andere transformaties uit te voeren, bijvoorbeeld:
JSON transformeren naar tekst
In de volgende Liquid-sjabloon ziet u een voorbeeldtransformatie voor JSON-naar-tekst:
{{content.firstName | Append: ' ' | Append: content.lastName}}
In het volgende voorbeeld ziet u de voorbeeldinvoer en uitvoer:
XML transformeren naar JSON
In de volgende Liquid-sjabloon ziet u een voorbeeldtransformatie voor XML naar JSON:
[{% JSONArrayFor item in content -%}
{{item}}
{% endJSONArrayFor -%}]
De JSONArrayFor
lus is een aangepast lusmechanisme voor XML-invoer, zodat u JSON-nettoladingen kunt maken die een volgkomma voorkomen. where
De voorwaarde voor dit aangepaste lusmechanisme maakt ook gebruik van de naam van het XML-element voor vergelijking, in plaats van de waarde van het element zoals andere Liquid-filters. Zie Deep Dive over set-body Policy - Verzamelingen van dingen voor meer informatie.
In het volgende voorbeeld ziet u de voorbeeldinvoer en uitvoer:
XML transformeren naar tekst
In de volgende Liquid-sjabloon ziet u een voorbeeldtransformatie voor XML-naar-tekst:
{{content.firstName | Append: ' ' | Append: content.lastName}}
In het volgende voorbeeld ziet u de voorbeeldinvoer en uitvoer:
Overwegingen voor liquide sjablonen
Liquid-sjablonen volgen de limieten voor de bestandsgrootte voor kaarten in Azure Logic Apps.
De actie JSON transformeren naar JSON volgt de DotLiquid-implementatie voor Liquid. Deze implementatie is een poort naar het .NET Framework van de Shopify-implementatie voor Liquid en verschilt in specifieke gevallen.
In de volgende lijst worden de bekende verschillen beschreven:
Met de actie JSON transformeren naar JSON wordt een tekenreeks uitgevoerd, die JSON, XML, HTML, enzovoort kan bevatten. De actie Liquid geeft alleen aan dat de verwachte tekstuitvoer van de Liquid-sjabloon een JSON-tekenreeks is. Met de actie wordt uw logische app geïnstrueerd om invoer als een JSON-object te parseren en een wrapper toe te passen, zodat Liquid de JSON-structuur kan interpreteren. Na de transformatie geeft de actie uw logische app de instructie om de tekstuitvoer van Liquid terug naar JSON te parseren.
DotLiquid begrijpt JSON niet, dus zorg ervoor dat u het backslash-teken (
\
) en andere gereserveerde JSON-tekens escapet.Als uw sjabloon gebruikmaakt van Liquid-filters, moet u ervoor zorgen dat u de naamconventies dotLiquid en C# volgt, waarbij zinnen worden gebruikt. Voor alle Liquid-transformaties moet u ervoor zorgen dat filternamen in uw sjabloon ook zinsbehuizing gebruiken. Anders werken de filters niet.
Als u bijvoorbeeld het
replace
filter gebruikt, gebruiktReplace
u , nietreplace
. Dezelfde regel is van toepassing als u online voorbeelden van DotLiquid probeert. Zie Shopify Liquid-filters en DotLiquid Liquid-filters voor meer informatie. De Shopify-specificatie bevat voorbeelden voor elk filter, dus voor vergelijking kunt u deze voorbeelden proberen op DotLiquid - Online proberen.Het
json
filter van de Shopify-extensiefilters is momenteel niet geïmplementeerd in DotLiquid. Normaal gesproken kunt u dit filter gebruiken om tekstuitvoer voor te bereiden voor JSON-tekenreeksparsering, maar in plaats daarvan moet u hetReplace
filter gebruiken.Het standaardfilter
Replace
in de DotLiquid-implementatie maakt gebruik van reguliere expressies (RegEx) matching, terwijl de Shopify-implementatie eenvoudige tekenreekskoppeling gebruikt. Beide implementaties lijken op dezelfde manier te werken totdat u een gereserveerd regEx-teken of een escape-teken in de overeenkomstparameter gebruikt.Als u bijvoorbeeld wilt ontsnappen aan het escapeteken regEx-gereserveerde backslash (
\
), gebruikt| Replace: '\\', '\\'
u en niet| Replace: '\', '\\'
. In deze voorbeelden ziet u hoe hetReplace
filter zich anders gedraagt wanneer u het backslash-teken probeert te ontsnappen. Hoewel deze versie met succes werkt:{ "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\\', '\\' | Replace: '"', '\"'}}"}
Met dit resultaat:
{ "SampleText": "The quick brown fox \"jumped\" over the sleeping dog\\\\"}
Deze versie mislukt:
{ "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\', '\\' | Replace: '"', '\"'}}"}
Met deze fout:
{ "SampleText": "Liquid error: parsing "\" - Illegal \ at end of pattern."}
Zie Standaardfilter vervangen voor meer informatie over regex-patroonkoppeling....
Het
Sort
filter in de DotLiquid-implementatie sorteert items in een matrix of verzameling op eigenschap, maar met deze verschillen:Volgt Shopify's sort_natural gedrag, niet het sorteergedrag van Shopify.
Sorteert alleen in tekenreeks alfanumerieke volgorde. Zie Numeriek sorteren voor meer informatie.
Maakt gebruik van hoofdlettergevoelige volgorde, niet hoofdlettergevoelige volgorde. Zie Sort filter volgt geen hoofdlettergedrag van Shopify's specificatie voor meer informatie.