Trasformare JSON e XML usando modelli Liquid come mappe nei flussi di lavoro usando App per la logica di Azure

Si applica a: App per la logica di Azure (consumo + standard)

Quando si vogliono eseguire trasformazioni JSON di base nei flussi di lavoro dell'app per la logica, è possibile usare operazioni di dati predefinite, ad esempio l'azione Componi o Analizza JSON . Tuttavia, alcuni scenari potrebbero richiedere trasformazioni avanzate e complesse che includono elementi quali iterazioni, flussi di controllo e variabili. Per le trasformazioni da JSON a JSON, DA JSON a testo, DA XML a JSON o DA XML a testo, è possibile creare un modello che descrive il mapping o la trasformazione necessari usando il linguaggio del modello open source Liquid. È possibile selezionare questo modello quando si aggiunge un'azione predefinita Liquid al flusso di lavoro. È possibile usare azioni Liquid nei flussi di lavoro delle app per la logica a consumo multi-tenant e nei flussi di lavoro delle app per la logica Standard a tenant singolo.

Anche se non sono disponibili trigger Liquid , è possibile usare qualsiasi trigger o azione per inserire il contenuto JSON o XML di origine nel flusso di lavoro. Ad esempio, è possibile usare un trigger connettore predefinito, un trigger del connettore gestito o ospitato in Azure disponibile per App per la logica di Azure o anche un'altra app.

Questo articolo illustra come completare le attività seguenti:

  • Creare un modello Liquid.
  • Caricare il modello nell'account di integrazione per i flussi di lavoro dell'app per la logica a consumo o nella risorsa dell'app per la logica Standard da usare in qualsiasi flusso di lavoro figlio.
  • Aggiungere un'azione Liquid al flusso di lavoro.
  • Selezionare il modello come mappa da usare.

Per altre informazioni, vedere la documentazione seguente:

Prerequisiti

  • Account e sottoscrizione di Azure. Se non si ha una sottoscrizione, è possibile iscriversi per creare un account Azure gratuito.

  • Risorsa e flusso di lavoro dell'app per la logica. Le operazioni liquide non dispongono di trigger disponibili, quindi il flusso di lavoro deve includere al minimo un trigger. Per altre informazioni, vedere la documentazione seguente:

  • In base al fatto che si stia lavorando a un flusso di lavoro dell'app per la logica a consumo o Standard, è necessaria una risorsa dell'account di integrazione. In genere, questa risorsa è necessaria quando si vogliono definire e archiviare artefatti da usare nei flussi di lavoro di integrazione aziendale e B2B.

    Importante

    Per collaborare, sia l'account di integrazione che la risorsa dell'app per la logica devono esistere nella stessa sottoscrizione di Azure e nella stessa area di Azure.

    • Se si usa un flusso di lavoro dell'app per la logica a consumo, l'account di integrazione richiede un collegamento alla risorsa dell'app per la logica.

    • Se si usa un flusso di lavoro dell'app per la logica Standard, è possibile collegare l'account di integrazione alla risorsa dell'app per la logica, caricare le mappe direttamente nella risorsa dell'app per la logica o entrambe, in base agli scenari seguenti:

      • Se si dispone già di un account di integrazione con gli artefatti necessari o da usare, è possibile collegare l'account di integrazione a più risorse dell'app per la logica Standard in cui si vogliono usare gli artefatti. In questo modo, non è necessario caricare mappe in ogni singola app per la logica. Per altre informazioni, vedere Collegare la risorsa dell'app per la logica all'account di integrazione.

      • Il connettore predefinito Liquid consente di selezionare una mappa caricata in precedenza nella risorsa dell'app per la logica o in un account di integrazione collegato, ma non entrambi. È quindi possibile usare questi artefatti in tutti i flussi di lavoro figlio all'interno della stessa risorsa dell'app per la logica.

      Pertanto, se non si ha o non è necessario un account di integrazione, è possibile usare l'opzione di caricamento. In caso contrario, è possibile usare l'opzione di collegamento. In entrambi i casi, è possibile usare questi artefatti in tutti i flussi di lavoro figlio all'interno della stessa risorsa dell'app per la logica.

  • Conoscenza di base sul linguaggio del modello Liquid. App per la logica di Azure usa DotLiquid 2.0.361.

    Nota

    L'azione Liquid denominata Transform JSON to JSON segue l'implementazione DotLiquid per Liquid, che differisce in casi specifici dall'implementazione di Shopify per Liquid. Per altre informazioni, vedere Considerazioni sul modello Liquid.

Passaggio 1: Creare il modello

Prima di poter eseguire una trasformazione Liquid nel flusso di lavoro dell'app per la logica, è necessario creare un modello Liquid che definisce il mapping desiderato.

  1. Creare il modello Liquid usato come mappa per la trasformazione JSON. È possibile usare qualsiasi strumento di modifica desiderato.

    L'esempio di trasformazione DA JSON a JSON in questo articolo usa il modello Liquid di esempio seguente:

    {%- 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. Salvare il modello usando l'estensione di file Liquid template (con estensione liquid). Questo esempio usa SimpleJsonToJsonTemplate.liquid.

Passaggio 2: Caricare il modello Liquid

Dopo aver creato il modello Liquid, è ora necessario caricare il modello in base allo scenario seguente:

Caricare il modello nell'account di integrazione

  1. Nella portale di Azure accedere con le credenziali dell'account Azure.

  2. Nella casella di ricerca portale di Azure immettere gli account di integrazione e selezionare Account di integrazione.

    Screenshot showing the Azure portal search box with

  3. Trovare e selezionare l'account di integrazione.

    Screenshot showing integration accounts pane with integration account selected.

  4. Nel menu di spostamento dell'account di integrazione, in Impostazioni, selezionare Mappe.

    Screenshot showing integration account navigation menu with

  5. Nel riquadro Mappe selezionare Aggiungi. Fornire le informazioni seguenti sulla mappa:

    Proprietà valore Descrizione
    Nome JsonToJsonTemplate Nome per la mappa, ovvero "JsonToJsonTemplate" in questo esempio
    Tipo di mapping Liquido Tipo di mappa. Per la trasformazione da JSON a JSON, è necessario selezionare Liquid.
    Mappa SimpleJsonToJsonTemplate.liquid File di mappa o di modello Liquid esistente da usare per la trasformazione, ovvero "SimpleJsonToJsonTemplate.liquid" in questo esempio. Per trovare questo file, è possibile usare la selezione file. Per i limiti delle dimensioni della mappa, vedere Limiti e configurazione.

    Screenshot showing

Caricare un modello nell'app per la logica Standard

  1. Nella portale di Azure trovare e aprire la risorsa dell'app per la logica. Assicurarsi di essere a livello di risorsa, non a livello di flusso di lavoro.

  2. Nel menu di spostamento della risorsa dell'app per la logica, in Artefatti selezionare Mappe.

  3. Sulla barra degli strumenti del riquadro Mappe selezionare Aggiungi.

  4. Nel riquadro Aggiungi mappa specificare le informazioni seguenti sul modello:

    Proprietà valore Descrizione
    Nome JsonToJsonTemplate Nome per la mappa, ovvero "JsonToJsonTemplate" in questo esempio
    Tipo di mapping Liquido Tipo di mappa. Per la trasformazione da JSON a JSON, è necessario selezionare Liquid.
    Mappa SimpleJsonToJsonTemplate.liquid File di mappa o di modello Liquid esistente da usare per la trasformazione, ovvero "SimpleJsonToJsonTemplate.liquid" in questo esempio. Per trovare questo file, è possibile usare la selezione file. Per i limiti delle dimensioni della mappa, vedere Limiti e configurazione.
  5. Al termine, seleziona OK.

    Al termine del caricamento del file, la mappa viene visualizzata nell'elenco Mappe. Nella pagina Panoramica dell'account di integrazione, in Artefatti, viene visualizzata anche la mappa caricata.

Passaggio 3: Aggiungere l'azione di trasformazione Liquid

I passaggi seguenti illustrano come aggiungere un'azione di trasformazione Liquid per flussi di lavoro di app per la logica a consumo e standard.

  1. Nel portale di Azure aprire il flusso di lavoro dell'app per la logica nella finestra di progettazione, se non è già aperto.

  2. Se il flusso di lavoro non ha un trigger o altre azioni necessarie per il flusso di lavoro, aggiungere prima tali operazioni. Le operazioni liquide non hanno trigger disponibili.

    Questo esempio continua con il trigger Request denominato Quando viene ricevuta una richiesta HTTP.

  3. Nella finestra di progettazione del flusso di lavoro, nel passaggio in cui si vuole aggiungere l'azione Liquid, selezionare Nuovo passaggio.

  4. Nella casella di ricerca di Scegliere un'operazione selezionare Tutte. Nella casella di ricerca immettere liquid.

  5. Nell'elenco delle azioni selezionare l'azione Liquid che si vuole usare.

    Questo esempio continua a usare l'azione denominata Trasforma JSON in JSON.

    Screenshot showing Consumption workflow designer with a Liquid action selected.

  6. Nella proprietà Content dell'azione specificare l'output JSON del trigger o un'azione precedente che si vuole trasformare seguendo questa procedura.

    1. Fare clic all'interno della casella Contenuto in modo che venga visualizzato l'elenco di contenuto dinamico.

    2. Nell'elenco di contenuto dinamico selezionare i dati JSON da trasformare.

      Per questo esempio, dall'elenco di contenuto dinamico, in Quando viene ricevuta una richiesta HTTP, selezionare il token Corpo , che rappresenta l'output del contenuto del corpo dal trigger.

      Screenshot showing Consumption workflow, Liquid action's

  7. Nell'elenco Mappa selezionare il modello Liquid.

    Questo esempio continua con il modello denominato JsonToJsonTemplate.

    Screenshot showing Consumption workflow, Liquid action's

    Nota

    Se l'elenco mappe è vuoto, la risorsa dell'app per la logica non è collegata all'account di integrazione o l'account di integrazione non contiene file di mapping.

    Al termine, l'azione sarà simile all'esempio seguente:

    Screenshot showing Consumption workflow with finished

  8. Salvare il flusso di lavoro. Sulla barra degli strumenti della finestra di progettazione seleziona Salva.

Testare il flusso di lavoro

  1. Usando Postman o uno strumento simile e il POST metodo , inviare una chiamata all'URL del trigger di richiesta, visualizzato nella proprietà URL POST HTTP del trigger di richiesta e includere l'input JSON da trasformare, ad esempio:

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  2. Al termine dell'esecuzione del flusso di lavoro, passare alla cronologia di esecuzione del flusso di lavoro ed esaminare gli input e gli output dell'azione Trasforma JSON in JSON , ad esempio:

    Screenshot showing example output.

Altre trasformazioni liquide

È possibile usare Liquid per eseguire altre trasformazioni, ad esempio:

Trasforma JSON in testo

Il modello Liquid seguente illustra una trasformazione di esempio per JSON in testo:

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

L'esempio seguente mostra gli input e gli output di esempio:

Screenshot showing example output for JSON to text transformation.

Trasforma XML in JSON

Il modello Liquid seguente illustra una trasformazione di esempio per XML in JSON:

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

Il JSONArrayFor ciclo è un meccanismo di ciclo personalizzato per l'input XML in modo da poter creare payload JSON che evitano una virgola finale. Inoltre, la where condizione per questo meccanismo di ciclo personalizzato usa il nome dell'elemento XML per il confronto, anziché il valore dell'elemento come altri filtri Liquid. Per altre informazioni, vedere Deep Dive on set-body Policy - Collections of Things.For more information, see Deep Dive on set-body Policy - Collections of Things.

L'esempio seguente mostra gli input e gli output di esempio:

Screenshot showing example output for XML to JSON transformation.

Trasforma XML in testo

Il modello Liquid seguente illustra una trasformazione di esempio per XML in testo:

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

L'esempio seguente mostra gli input e gli output di esempio:

Screenshot showing example output for XML to text transformation.

Considerazioni sul modello liquido

  • I modelli liquid seguono i limiti di dimensioni dei file per le mappe in App per la logica di Azure.

  • L'azione Trasforma JSON in JSON segue l'implementazione DotLiquid per Liquid. Questa implementazione è una porta a .NET Framework dall'implementazione di Shopify per Liquid e differisce in casi specifici.

    L'elenco seguente descrive le differenze note:

    • L'azione Transform JSON to JSON restituisce in modo nativo una stringa, che può includere JSON, XML, HTML e così via. L'azione Liquid indica solo che l'output di testo previsto del modello Liquid è una stringa JSON. L'azione indica all'app per la logica di analizzare l'input come oggetto JSON e applica un wrapper in modo che Liquid possa interpretare la struttura JSON. Dopo la trasformazione, l'azione indica all'app per la logica di analizzare l'output di testo da Liquid a JSON.

      DotLiquid non riconosce in modo nativo JSON, quindi assicurarsi di eseguire l'escape del carattere barra rovesciata (\) e di qualsiasi altro carattere JSON riservato.

    • Se il modello usa filtri Liquid, assicurarsi di seguire le convenzioni di denominazione DotLiquid e C#, che usano le maiuscole e minuscole delle frasi. Per tutte le trasformazioni Liquid, assicurarsi che i nomi dei filtri nel modello usino anche maiuscole e minuscole. In caso contrario, i filtri non funzioneranno.

      Ad esempio, quando si usa il replace filtro, usare Replace, non replace. La stessa regola si applica se si provano esempi in DotLiquid online. Per altre informazioni, vedi Filtri Shopify Liquid e filtri DotLiquid Liquid. La specifica Shopify include esempi per ogni filtro, quindi per il confronto, puoi provare questi esempi in DotLiquid - Prova online.

    • Il json filtro dei filtri di estensione Shopify non è attualmente implementato in DotLiquid. In genere, è possibile usare questo filtro per preparare l'output di testo per l'analisi di stringhe JSON, ma è invece necessario usare il Replace filtro.

    • Il filtro standard Replace nell'implementazionedi DotLiquid usa la corrispondenza di espressioni regolari (RegEx), mentre l'implementazione di Shopify usa la corrispondenza di stringhe semplice. Entrambe le implementazioni sembrano funzionare allo stesso modo finché non si usa un carattere riservato RegEx o un carattere di escape nel parametro di corrispondenza.

      Ad esempio, per eseguire l'escape del carattere di escape regEx-reserved barra rovesciata (\), usare | Replace: '\\', '\\'e non | Replace: '\', '\\'. Questi esempi illustrano il Replace comportamento del filtro in modo diverso quando si tenta di eseguire l'escape del carattere barra rovesciata. Anche se questa versione funziona correttamente:

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

      Con questo risultato:

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

      Questa versione ha esito negativo:

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

      Con questo errore:

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

      Per altre informazioni, vedere Replace standard filter uses RegEx pattern matching....For more information, see Replace standard filter uses RegEx pattern matching....

    • Il Sort filtro nell'implementazione dotLiquid ordina gli elementi in una matrice o in una raccolta per proprietà, ma con queste differenze:

Passaggi successivi