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:

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.

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.

  1. 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 -%}
       ]
    }
    
  2. 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:

Carga de plantilla en la cuenta de integración

  1. En Azure Portal, inicie sesión con las credenciales de su cuenta de Azure.

  2. En el cuadro de búsqueda de Azure Portal, escriba cuentas de integración y seleccione Cuentas de integración.

    Captura de pantalla que muestra el cuadro de búsqueda de Azure Portal con las

  3. Busque y seleccione su cuenta de integración.

    Captura de pantalla que muestra el panel de cuentas de integración con la cuenta de integración seleccionada.

  4. En el menú de navegación de la cuenta de integración, en Configuración, seleccione Asignaciones.

    Captura de pantalla que muestra el menú de navegación de cuentas de integración con

  5. 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.

    Captura de pantalla que muestra el panel

Carga de una plantilla en la aplicación lógica estándar

  1. 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.

  2. En el menú de navegación del recurso de aplicación lógica, en Artefactos, seleccione Asignaciones.

  3. En la barra de herramientas del panel Asignaciones, seleccione Agregar.

  4. 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.
  5. 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.

  1. En Azure Portal, abra la aplicación lógica en el diseñador de flujos de trabajo, si aún no lo ha hecho.

  2. 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.

  3. En el diseñador del flujo de trabajo, en el paso donde quiera agregar la acción de Liquid, seleccione Nuevo paso.

  4. En el cuadro de búsqueda Choose an operation (Elegir una operación), escriba Todo. En el cuadro de búsqueda, escriba liquid.

  5. 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.

    Captura de pantalla que muestra el diseñador de un flujo de trabajo de consumo y una acción de Liquid seleccionada.

  6. 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.

    1. Haga clic en el cuadro Contenido para que aparezca la lista de contenido dinámico.

    2. 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.

      Captura de pantalla que muestra un flujo de trabajo de consumo, la propiedad

  7. En la lista Asignación, seleccione la plantilla de Liquid.

    Este ejemplo continúa con la plantilla denominada JsonToJsonTemplate.

    Captura de pantalla que muestra un flujo de trabajo de consumo, la propiedad

    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:

    Captura de pantalla que muestra un flujo de trabajo de consumo con la acción

  8. 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:

  1. En el desencadenador Solicitud, busque la propiedad URL del mensaje HTTP y copie la dirección URL.

  2. 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.

  3. Incluya la entrada JSON que se va a transformar, por ejemplo:

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

    Captura de pantalla que muestra una salida de 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:

Captura de pantalla que muestra una salida de ejemplo para transformación de JSON a texto.

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:

Captura de pantalla que muestra una salida de ejemplo para transformación de XML a JSON.

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:

Captura de pantalla que muestra una salida de ejemplo para transformación de XML a texto.

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, use Replace, no replace. 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 filtro Replace.

    • 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 filtro Replace 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:

Pasos siguientes