Transformación de JSON y XML mediante plantillas de Liquid como asignaciones en flujos de trabajo con Azure Logic Apps
Se aplica a: Azure Logic Apps (consumo + estándar)
Cuando quiera realizar transformaciones de JSON básicas en los flujos de trabajo de aplicación lógica, puede usar operaciones de datos integradas, como las acciones Redactar o Análisis del archivo JSON. Sin embargo, algunos escenarios pueden requerir transformaciones avanzadas y complejas que incluyen elementos como iteraciones, flujos de control y variables. Para las transformaciones de JSON a JSON, JSON a texto, XML a JSON o XML a texto, puede crear una plantilla que describa la asignación o transformación necesaria mediante el lenguaje de plantilla de código abierto Liquid. Puede seleccionar esta plantilla cuando agrega una acción integrada de Liquid al flujo de trabajo. Puede usar acciones de Liquid en flujos de trabajo de aplicación lógica de consumo multiinquilino y flujos de trabajo de aplicación lógica estándar de un solo inquilino.
Aunque no haya desencadenadores de Liquid disponibles, puede usar cualquier desencadenador o acción para alimentar el contenido XML en el flujo de trabajo. Por ejemplo, puede usar un desencadenador de conector integrado, un desencadenador de conector administrado u hospedado en Azure disponible para Azure Logic Apps o incluso otra aplicación.
En este artículo se muestra cómo completar las tareas siguientes:
- Crear una plantilla de Liquid.
- Cargue la plantilla en la cuenta de integración para flujos de trabajo de aplicación lógica de consumo o en el recurso de aplicación lógica estándar para su uso en cualquier flujo de trabajo secundario.
- Agregue una acción de Liquid al flujo de trabajo.
- Seleccionar la plantilla como la asignación que se quiere usar.
Para más información, revise la siguiente documentación:
- Realización de operaciones de datos en Azure Logic Apps
- Lenguaje de plantilla de código abierto de Liquid
- Consumo frente a aplicaciones lógicas estándar
- Conectores integrados de la cuenta de integración
- Introducción a los conectores integrados para Azure Logic Apps
- Introducción a los conectores administrados u hospedados en Azure para Azure Logic Apps y conectores administrados u hospedados en Azure Logic Apps
Requisitos previos
Una cuenta y una suscripción de Azure. Si aún no tiene una, regístrese para obtener una cuenta de Azure gratuita.
El recurso y el flujo de trabajo de la aplicación lógica. Las operaciones de Liquid no tienen ningún desencadenador disponible, por lo que el flujo de trabajo tiene que incluir como mínimo un desencadenador. Para más información, consulte la siguiente documentación:
En función de si está trabajando en un flujo de trabajo de aplicación lógica de consumo o estándar, necesitará un recurso de cuenta de integración. Normalmente, necesita este recurso cuando desea definir y almacenar artefactos para utilizarlos en flujos de trabajo de integración empresarial y B2B.
Importante
Para trabajar conjuntamente, tanto la cuenta de integración como el recurso de aplicación lógica deben existir en la misma suscripción y región de Azure.
Si está trabajando en un flujo de trabajo de aplicación lógica de consumo, la cuenta de integración requiere un vínculo al recurso de aplicación lógica.
Si está trabajando en un flujo de trabajo de aplicación lógica estándar, puede vincular la cuenta de integración al recurso de aplicación lógica, cargar asignaciones directamente en el recurso de aplicación lógica, o ambas, en función de los escenarios siguientes:
Si ya tiene una cuenta de integración con los artefactos que necesita o quiere usar, puede vincular la cuenta de integración a varios recursos de aplicación lógica estándar en los que desee utilizar los artefactos. De este modo, no es necesario cargar mapas en cada aplicación lógica individual. Para más información, consulte el artículo sobre vinculación del recurso de aplicación lógica a la cuenta de integración.
El conector integrado de Liquid permite seleccionar una asignación que haya cargado anteriormente en el recurso de la aplicación lógica o en una cuenta de integración vinculada, pero no ambos. Puede usar luego estos artefactos en todos los flujos de trabajo secundarios dentro del mismo recurso de aplicación lógica.
Por lo tanto, si no tiene o no necesita una cuenta de integración, puede usar la opción de carga. De lo contrario, puede utilizar la opción de vinculación. En cualquier caso, puede usar estos artefactos en todos los flujos de trabajo secundarios dentro del mismo recurso de aplicación lógica.
Conocimientos básicos sobre el lenguaje de plantilla de Liquid. Azure Logic Apps usa DotLiquid 2.0.361.
Nota
La acción de Liquid denominada Transformar de JSON a JSON sigue a la implementación DotLiquid para Liquid, que, en determinados casos, difiere de la implementación Shopify para Liquid. Para más información, consulte Consideraciones sobre las plantillas de Liquid.
Instale o use una herramienta que envíe solicitudes HTTP para probar la solución. Por ejemplo:
- Visual Studio Code con una extensión de Visual Studio Marketplace
- Invoke-RestMethod de PowerShell
- Microsoft Edge: herramienta de consola de red
- Bruno
- curl
Precaución
En escenarios en los que tiene datos confidenciales, como credenciales, secretos, tokens de acceso, claves de API y otra información similar, asegúrese de usar una herramienta que proteja los datos con las características de seguridad necesarias, funcione sin conexión o localmente, no sincronice los datos en la nube y no requiera que inicie sesión en una cuenta en línea. De este modo, se reduce el riesgo de exponer datos confidenciales al público.
Paso 1: Creación de la plantilla
Antes de poder realizar una transformación de Liquid en el flujo de trabajo de aplicación lógica, primero debe crear una plantilla de Liquid que defina la asignación que quiere.
Cree la plantilla de Liquid que va a usar como asignación de la transformación JSON. Puede usar la herramienta de edición que prefiera.
En el ejemplo de transformación de JSON a JSON de este artículo se usa la siguiente plantilla de Liquid de ejemplo:
{%- 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 -%} ] }
Guarde la plantilla mediante la extensión de archivo de plantilla de Liquid (.liquid). En este ejemplo se usa SimpleJsonToJsonTemplate.liquid.
Paso 2: Carga de una plantilla de Liquid
Después de crear la plantilla de Liquid, ahora tiene que cargarla en función del escenario siguiente:
Si está trabajando en un flujo de trabajo de aplicación lógica de consumo, cargue la plantilla en la cuenta de integración.
Si está trabajando en un flujo de trabajo de aplicación lógica estándar, puede cargar la plantilla en la cuenta de integración o cargar la plantilla en el recurso de aplicación lógica.
Carga de plantilla en la cuenta de integración
En Azure Portal, inicie sesión con las credenciales de su cuenta de Azure.
En el cuadro de búsqueda de Azure Portal, escriba cuentas de integración y seleccione Cuentas de integración.
Busque y seleccione su cuenta de integración.
En el menú de navegación de la cuenta de integración, en Configuración, seleccione Asignaciones.
En el panel Asignaciones, seleccione Agregar. Especifique la siguiente información acerca de la asignación:
Propiedad Valor Descripción Nombre JsonToJsonTemplate
Nombre de la asignación, que es "JsonToJsonTemplate" en este ejemplo Tipo de asignación Liquid Tipo de la asignación. Para la transformación de JSON a JSON, debe seleccionar Liquid. Map SimpleJsonToJsonTemplate.liquid
Archivo de asignación o plantilla de Liquid existente para su uso en la transformación, "SimpleJsonToJsonTemplate.liquid" en este ejemplo. Puede usar el selector de archivos para buscar el archivo. Para conocer los límites de tamaño de las asignaciones, consulte Límites y configuración.
Carga de una plantilla en la aplicación lógica estándar
En Azure Portal, busque y abra el recurso de aplicación lógica. Asegúrese de estar en el nivel de recurso, no en el nivel de flujo de trabajo.
En el menú de navegación del recurso de aplicación lógica, en Artefactos, seleccione Asignaciones.
En la barra de herramientas del panel Asignaciones, seleccione Agregar.
En el panel Agregar asignación, proporcione la siguiente información sobre la plantilla:
Propiedad Valor Descripción Nombre JsonToJsonTemplate
Nombre de la asignación, que es "JsonToJsonTemplate" en este ejemplo Tipo de asignación Liquid Tipo de la asignación. Para la transformación de JSON a JSON, debe seleccionar Liquid. Map SimpleJsonToJsonTemplate.liquid
Archivo de asignación o plantilla de Liquid existente para su uso en la transformación, "SimpleJsonToJsonTemplate.liquid" en este ejemplo. Puede usar el selector de archivos para buscar el archivo. Para conocer los límites de tamaño de las asignaciones, consulte Límites y configuración. Cuando finalice, seleccione Aceptar.
Cuando el archivo de asignación termine de cargarse, la asignación aparecerá en la lista de asignaciones. En la página Información general de la cuenta de integración, en Artefactos, también aparece la asignación cargada.
Paso 3: Incorporación de la acción de transformación de Liquid
En los pasos siguientes se muestra cómo agregar una acción de transformación de Liquid para flujos de trabajo de aplicación lógica estándar y de consumo.
En Azure Portal, abra la aplicación lógica en el diseñador de flujos de trabajo, si aún no lo ha hecho.
Si el flujo de trabajo no tiene ningún desencadenador ni ninguna otra acción que necesite, agregue primero estas operaciones. Las operaciones de Liquid no tienen ningún desencadenador disponible.
Este ejemplo continúa con el desencadenador de solicitud llamado Cuando se recibe una solicitud HTTP.
En el diseñador del flujo de trabajo, en el paso donde quiera agregar la acción de Liquid, seleccione Nuevo paso.
En el cuadro de búsqueda Choose an operation (Elegir una operación), escriba Todo. En el cuadro de búsqueda, escriba liquid.
En la lista de acciones, seleccione la acción de Liquid que quiera usar.
Este ejemplo continúa con la acción denominada Transformar de JSON a JSON.
En la propiedad Content de la acción, proporcione la salida JSON del desencadenador o una acción anterior que quiera transformar siguiendo estos pasos.
Haga clic en el cuadro Contenido para que aparezca la lista de contenido dinámico.
En la lista de contenido dinámico, seleccione los datos JSON que desee transformar.
En este ejemplo, en la lista de contenido dinámico, en Cuando se recibe una solicitud HTTP, seleccione el token Cuerpo que representa la salida del contenido del cuerpo del desencadenador.
En la lista Asignación, seleccione la plantilla de Liquid.
Este ejemplo continúa con la plantilla denominada JsonToJsonTemplate.
Nota
Si la lista de asignaciones está vacía, el recurso de la aplicación lógica no está vinculado a la cuenta de integración o esta no contiene ningún archivo de asignación.
Cuando haya terminado, la acción tendrá una apariencia similar a la del siguiente ejemplo:
Guarde el flujo de trabajo. En la barra de herramientas del diseñador, seleccione Save (Guardar).
Prueba del flujo de trabajo
Para desencadenar el flujo de trabajo, siga estos pasos:
En el desencadenador Solicitud, busque la propiedad URL del mensaje HTTP y copie la dirección URL.
Abra la herramienta de solicitud HTTP y use sus instrucciones para enviar una solicitud HTTP a la dirección URL copiada, incluyendo el método que espera el desencadenador Solicitud.
En este ejemplo, se usa el método
POST
con la dirección URL.Incluya la entrada JSON que se va a transformar, por ejemplo:
{ "devices": "Surface, Mobile, Desktop computer, Monitors", "firstName": "Dean", "lastName": "Ledet", "phone": "(111)0001111" }
Cuando el flujo de trabajo termine de ejecutarse, vaya al historial de ejecución del flujo de trabajo y examine las entradas y salidas de la acción Transformar de JSON a JSON, por ejemplo:
Otras transformaciones de Liquid
Puede usar Liquid para realizar otras transformaciones, por ejemplo,
Transformación de JSON en texto
En la plantilla de Liquid siguiente se muestra una transformación de ejemplo para JSON a texto:
{{content.firstName | Append: ' ' | Append: content.lastName}}
En el ejemplo siguiente se muestran las entradas y salidas de ejemplo:
Transformación XML a JSON
En la plantilla de Liquid siguiente se muestra una transformación de ejemplo para XML a JSON:
[{% JSONArrayFor item in content -%}
{{item}}
{% endJSONArrayFor -%}]
El bucle JSONArrayFor
es un mecanismo de bucle personalizado para la entrada XML, de forma que puede crear cargas JSON que eviten una coma final. Además, la condición where
de este mecanismo de bucle personalizado utiliza el nombre del elemento XML para la comparación, en lugar del valor del elemento como sucede con otros filtros Liquid. Para más información, consulte Profundización en la directiva set-body: colecciones de cosas.
En el ejemplo siguiente se muestran las entradas y salidas de ejemplo:
Transformación XML a texto
En la plantilla de Liquid siguiente se muestra una transformación de ejemplo para XML a texto:
{{content.firstName | Append: ' ' | Append: content.lastName}}
En el ejemplo siguiente se muestran las entradas y salidas de ejemplo:
Consideraciones sobre las plantillas de Liquid
Las plantillas de Liquid siguen los límites de tamaño de archivo de las asignaciones de Azure Logic Apps.
La acción Transformar de JSON a JSON sigue a la implementación DotLiquid para Liquid. Esta implementación es un puerto a .NET Framework desde la implementación Shopify para Liquid y varía en casos concretos.
La lista siguiente describe las diferencias conocidas:
La acción Transformar de JSON a JSON genera de forma nativa una cadena que puede incluir JSON, XML, HTML, etc. La acción de Liquid solo indica que la salida de texto esperada de la plantilla de Liquid es una cadena JSON. La acción indica a la aplicación lógica que analice la entrada como un objeto JSON y que aplique un contenedor para que Liquid pueda interpretar la estructura JSON. Después de la transformación, la acción indica a la aplicación lógica que analice la salida de texto de Liquid a JSON.
DotLiquid no comprende JSON de forma nativa, por lo que debe asegurarse de escapar el carácter de barra diagonal inversa (
\
) y cualquier otro carácter JSON reservado.Si la plantilla usa filtros de Liquid, asegúrese de seguir las convenciones de nomenclatura de DotLiquid y C#, que usan mayúscula al principio de la oración. En todas las transformaciones Liquid, asegúrese de que los nombres de los filtros de la plantilla también usen mayúscula al principio. De lo contrario, los filtros no funcionarán.
Por ejemplo, al usar el filtro
replace
, useReplace
, noreplace
. La misma regla se aplica si se prueban ejemplos en DotLiquid online. Para más información, consulte Filtros de Liquid para Shopify y Filtros de Liquid para DotLiquid. La especificación Shopify incluye ejemplos para cada filtro, por lo que, para realizar comparaciones, puede probar estos ejemplos en Probar DotLiquid en línea.Actualmente, el filtro
json
de los filtros de extensión Shopify no está implementado en DotLiquid. Normalmente, este filtro se usaría para preparar la salida de texto para el análisis de cadenas JSON; en cambio, debe usar el filtroReplace
.El filtro
Replace
estándar de la implementación DotLiquid usa la coincidencia de expresiones regulares (RegEx), mientras que la implementación Shopify usa la coincidencia de cadenas simples. Ambas implementaciones parecen funcionar de la misma manera hasta que se usa un carácter reservado de RegEx o un carácter de escape en el parámetro match.Por ejemplo, para escapar el carácter de escape reservado de barra diagonal inversa de RegEx (
\
), use| Replace: '\\', '\\'
y no| Replace: '\', '\\'
. En estos ejemplos se muestra que el filtroReplace
se comporta de forma diferente cuando se intenta escapar el carácter de barra diagonal inversa. Aunque esta versión funciona correctamente:{ "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\\', '\\' | Replace: '"', '\"'}}"}
Con este resultado:
{ "SampleText": "The quick brown fox \"jumped\" over the sleeping dog\\\\"}
Esta versión no funciona bien:
{ "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\', '\\' | Replace: '"', '\"'}}"}
Con este error:
{ "SampleText": "Liquid error: parsing "\" - Illegal \ at end of pattern."}
Para más información, consulte El filtro estándar Replace usa la coincidencia de patrones de RegEx....
El filtro
Sort
de la implementación DotLiquid ordena los elementos de una matriz o colección por propiedad, pero con estas diferencias:Sigue el comportamiento sort_natural de Shopify, no el comportamiento de ordenación de Shopify.
Solo ordena en orden alfanumérico de cadena. Para más información, consulte Ordenación numérica.
Usa el orden distinguir mayúsculas de minúsculas, no el orden que no realiza esta distinción. Para más información, consulte El filtro Sort no sigue el comportamiento de mayúsculas/minúsculas de la especificación de Shopify.