Condividi tramite


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

Si applica a: App per la logica di Azure (a consumo e 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 Liquid 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.

  • Installare o usare uno strumento che può inviare richieste HTTP per testare la soluzione, ad esempio:

    Attenzione

    Per gli scenari in cui sono presenti dati sensibili, ad esempio credenziali, segreti, token di accesso, chiavi API e altre informazioni simili, assicurarsi di usare uno strumento che protegge i dati con le funzionalità di sicurezza necessarie, funziona offline o in locale, non sincronizza i dati nel cloud e non richiede l'accesso a un account online. In questo modo si riduce il rischio di esporre i dati sensibili al pubblico.

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 del modello Liquid (.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. Nel portale di Azure accedere con le credenziali dell'account Azure.

  2. Nella casella di ricerca del portale di Azure immettere account di integrazionee selezionare Account di integrazione.

    Screenshot che mostra la casella di ricerca del portale di Azure con

  3. Trovare e selezionare l'account di integrazione.

    Screenshot che mostra il riquadro degli account di integrazione con l'account di integrazione selezionato.

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

    Screenshot che mostra il menu di spostamento dell'account di integrazione con l'opzione

  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 Liquid 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 che mostra il riquadro

Caricare un modello nell'app per la logica Standard

  1. Nel 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 Artefattiselezionare 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 Liquid 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 Artifacts, 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 Liquid non hanno trigger disponibili.

    Questo esempio continua con il trigger di Richiesta 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 che mostra la finestra di progettazione del flusso di lavoro Consumo con un'azione Liquid selezionata.

  6. Nella proprietà Contenuto dell'azione specificare l'output JSON del trigger o un'azione precedente da trasformare seguendo questa procedura.

    1. Fare clic all'interno della casella Contenuto per visualizzare l'elenco di contenuti dinamici.

    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 che mostra il flusso di lavoro Consumo, la proprietà

  7. Nell'elenco Mappa selezionare il modello Liquid.

    Questo esempio continua con il modello denominato JsonToJsonTemplate.

    Screenshot che mostra il flusso di lavoro Consumo, la proprietà

    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 deve essere simile all'esempio seguente:

    Screenshot che mostra il flusso di lavoro Consumo con l'azione

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

Testare il flusso di lavoro

Per attivare il flusso di lavoro, seguire questa procedura:

  1. Nel trigger di Richiesta, trovare la proprietà HTTP POST URL e copiare l'URL.

  2. Aprire lo strumento di richiesta HTTP e usare le istruzioni per inviare una richiesta HTTP all'URL copiato, incluso il metodo previsto dal trigger di Richiesta.

    In questo esempio viene usato il metodo POST con l'URL.

  3. Includere l'input JSON da trasformare, ad esempio:

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  4. 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 che mostra l'output di esempio.

Altre trasformazioni Liquid

È 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 che mostra l'output di esempio per la trasformazione da JSON a testo.

Trasforma XML in JSON

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

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

Il ciclo JSONArrayFor è un meccanismo di ciclo personalizzato per l'input XML in modo da poter creare payload JSON che evitano una virgola finale. Inoltre, la condizione where 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 Approfondimento sui criteri sul corpo del set - Raccolte di elementi.

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

Screenshot che mostra l'output di esempio per la trasformazione da XML a JSON.

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 che mostra l'output di esempio per la trasformazione da XML a testo.

Considerazioni sul modello Liquid

  • I modelli Liquid seguono i limiti delle 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 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 filtro replace, usare Replace, non replace. La stessa regola si applica se si provano esempi in DotLiquid online. Per altre informazioni, vedere 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 filtro json dai filtri di estensione Shopify è attualmente non implementato in DotLiquid. In genere, è possibile usare questo filtro per preparare l'output di testo per l'analisi delle stringhe JSON, ma è invece necessario usare il filtro Replace.

    • Il filtro Replace standard nell'implementazione DotLiquid usa corrispondenza dell'espressione regolare (RegEx), mentre l'implementazione Shopify usa semplice corrispondenza di stringhe. 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 della barra rovesciata riservata RegEx (\), usare | Replace: '\\', '\\' e non | Replace: '\', '\\'. Questi esempi illustrano il comportamento del filtro Replace 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 Sostituire il filtro standard utilizza la corrispondenza di pattern RegEx....

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

Passaggi successivi