Compartilhar via


Transformar JSON e XML usando modelos Liquid como mapas nos Aplicativos Lógicos do Azure

Aplica-se a: Aplicativos Lógicos do Azure (Consumo + Padrão)

Quando você deseja executar transformações JSON básicas nos fluxos de trabalho de seus aplicativos lógicos, pode usar operações de dados internos como a ação Compor ou Analisar o JSON. No entanto, alguns cenários podem exigir transformações avançadas e complexas que incluem elementos como iterações, fluxos de controle e variáveis. Para transformações entre JSON para JSON, JSON para texto, XML para JSON ou XML para texto, é possível criar um modelo que descreva o mapeamento ou a transformação necessários usando a linguagem do modelo de código aberto Liquid. Você pode selecionar esse modelo ao adicionar uma ação interna Liquid ao fluxo de trabalho. Você pode usar ações Liquid em fluxos de trabalho de aplicativo lógico de consumo multilocatário e fluxos de trabalho de aplicativo lógico Standard de locatário único.

Embora nenhum gatilho do Liquid esteja disponível, é possível usar qualquer gatilho ou ação para alimentar o conteúdo JSON ou XML de origem em seu fluxo de trabalho. Por exemplo, é possível usar um gatilho de conector interno, um gatilho de conector gerenciado ou hospedado no Azure disponível para Aplicativos Lógicos do Azure ou até mesmo outro aplicativo.

Este artigo mostra como completar as seguintes tarefas:

  • Criar um modelo Liquid.
  • Carregue o modelo na conta de integração para fluxos de trabalho do aplicativo lógico de consumo ou para o recurso de aplicativo lógico Standard para uso em qualquer fluxo de trabalho filho.
  • Adicione uma ação Liquid ao fluxo de trabalho.
  • Selecionar o modelo como o mapa que você deseja usar.

Para saber mais, consulte a seguinte documentação:

Pré-requisitos

  • Uma conta e uma assinatura do Azure. Se você não tem uma assinatura, inscreva-se em uma conta gratuita do Azure.

  • Seu recurso de aplicativo lógico e fluxo de trabalho. As operações Liquid não têm gatilhos disponíveis, portanto, o fluxo de trabalho precisa incluir minimamente um gatilho.

    Se você não tiver um recurso de aplicativo lógico e um fluxo de trabalho, crie-os agora seguindo as etapas para o aplicativo lógico desejado:

  • Um recurso de conta de integração. Normalmente, esse recurso é necessário ao definir e armazenar artefatos para uso na integração corporativa e nos fluxos de trabalho de B2B.

    Importante

    Para trabalhar em conjunto, a conta de integração e o recurso de aplicativo lógico devem existir na mesma assinatura do Azure e na região do Azure.

    • Se você estiver trabalhando em um fluxo de trabalho de aplicativo lógico de Consumo, a conta de integração exigirá um link para o recurso do aplicativo lógico.

    • Para um fluxo de trabalho de aplicativo lógico Standard , você pode vincular sua conta de integração ao recurso de aplicativo lógico, carregar mapas diretamente para o recurso do aplicativo lógico ou ambos, com base nos seguintes cenários:

      • Se você já tiver uma conta de integração com os artefatos que precisa ou deseja usar, pode vincular a conta de integração a vários recursos do aplicativo lógico Standard em que deseja usar os artefatos. Dessa forma, não será necessário carregar mapas em cada aplicativo lógico individual. Para obter mais informações, examine Vincular o recurso do aplicativo lógico à conta de integração.

      • O conector interno Liquid permite selecionar um mapa já carregado no recurso de aplicativo lógico ou em uma conta de integração vinculada, mas não em ambos. É possível usar esses artefatos em todos os fluxos de trabalho secundários dentro do mesmo recurso de aplicativo lógico.

      Portanto, se você não tiver ou precisar de uma conta de integração, poderá usar a opção de carregamento. Caso contrário, use a opção de vinculação. É possível usar esses artefatos em todos os fluxos de trabalho secundários dentro do mesmo recurso de aplicativo lógico.

  • Conhecimento básico sobre a Linguagem do modelo Liquid. Os Aplicativos Lógicos do Azure usam o DotLiquid 2.0.361.

    Observação

    A ação Liquid denominada Transformar JSON em JSON segue a implementação de DotLiquid para Liquid, que difere em casos específicos da implementação de Shopify para Liquid. Para obter mais informações, confira Considerações sobre o modelo Liquid.

  • Instale ou use uma ferramenta que possa enviar solicitações HTTP para testar sua solução, por exemplo:

    Atenção

    Para cenários em que você tem dados confidenciais, como credenciais, segredos, tokens de acesso, chaves de API e outras informações semelhantes, use uma ferramenta que proteja seus dados com os recursos de segurança necessários. A ferramenta deve funcionar offline ou localmente e não exigir entrar em uma conta online ou sincronizar dados com a nuvem. Ao usar uma ferramenta com essas características, você reduz o risco de expor dados confidenciais ao público.

Etapa 1: Criar o modelo

Para executar uma transformação Liquid em seu fluxo de trabalho do aplicativo lógico, crie um modelo Liquid que defina o mapeamento desejado.

  1. Crie o modelo Liquid que você usa como um mapa para a transformação JSON. Você pode usar qualquer ferramenta de edição que desejar.

    O exemplo de transformação JSON para JSON neste artigo usa o seguinte modelo Liquid de exemplo:

    {%- 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. Salve o modelo usando a extensão de arquivo do modelo Liquid (.liquid). Este exemplo é chamado SimpleJsonToJsonTemplate.liquid.

Etapa 2 – Carregar o modelo Liquid

Após criar o modelo Liquid, você precisará carregar o modelo com base no seguinte cenário:

Carregar o modelo na conta de integração

  1. No portal do Azure, entre com suas credenciais da conta do Azure.

  2. Na caixa de pesquisa do portal do Azure, insira contas de integração e selecione Contas de integração.

    Captura de tela mostrando a caixa de pesquisa do portal do Azure com contas de integração inseridas e contas de integração selecionadas.

  3. Localize e selecione a conta de integração.

    Captura de tela mostrando o painel contas de integração com a conta de integração selecionada.

  4. No menu de navegação da conta de integração, em Configurações, selecione Mapas.

    Captura de tela mostrando o menu de navegação da conta de integração com Mapas selecionados.

  5. No painel Mapas, selecione Adicionar. Forneça as seguintes informações sobre seu mapa:

    Propriedade Valor Descrição
    Nome JsonToJsonTemplate O nome do mapa, que é JsonToJsonTemplate neste exemplo
    Tipo de mapa Líquido O tipo do mapa. Para JSON para transformação de JSON, você deve selecionar Liquid.
    Map "SimpleJsonToJsonTemplate.liquid" Um modelo Liquid existente ou um arquivo de mapa a ser usado para transformação, que é SimpleJsonToJsonTemplate.liquid neste exemplo. Para localizar este arquivo, você pode usar o seletor de arquivos. Para os limites de tamanho do mapa, confira Limites e configuração.

    Captura de tela mostrando o painel Adicionar Mapa com o novo modelo carregado.

Carregar o modelo no aplicativo lógico Standard

  1. No portal do Azure, abra o recurso do aplicativo lógico padrão. Verifique se você está no nível do recurso, não no nível do fluxo de trabalho.

  2. No menu da barra lateral do recurso, em Artefatos, selecione Mapas.

  3. Na barra de ferramentas do painel Mapas, selecione Adicionar.

  4. No painel Adicionar Mapa , arraste e solte o arquivo na caixa de carregamento ou selecione Procurar arquivos.

    Depois que o arquivo de mapa termina de carregar, o mapa aparece na lista Mapas. No página Visão geral da conta de integração, em Artefatos, o mapa carregado também é exibido.

Etapa 3 - Adicionar a ação de transformação Liquid

As etapas a seguir mostram como adicionar uma ação de transformação Liquid para fluxos de trabalho de aplicativo lógico Standard e de consumo.

  1. No portal do Azure, abra o recurso de aplicativo lógico de Consumo.

  2. No menu da barra lateral do recurso, em Ferramentas de Desenvolvimento, selecione o designer para abrir seu fluxo de trabalho.

  3. Se o fluxo de trabalho não tiver um gatilho ou outras ações necessárias, adicione essas operações primeiro. As operações Liquid não têm gatilhos disponíveis.

    Este exemplo continua com o gatilho de solicitação chamado Quando uma solicitação HTTP é recebida.

  4. No gatilho, selecione Adicionar uma ação. Na caixa de pesquisa, digite liquid.

  5. Na lista de ações, selecione a ação Liquid que você deseja usar.

    Este exemplo continua usando a ação chamada Transformar JSON em JSON.

    Captura de tela mostrando Designer de fluxo de trabalho de consumo com uma ação Liquid selecionada.

  6. Na propriedade Conteúdo da ação, forneça a saída JSON do gatilho ou uma ação anterior que você deseja transformar seguindo estas etapas.

    1. Selecione dentro da caixa Conteúdo , que mostra as opções para abrir a lista de conteúdo dinâmico (ícone relâmpago) ou o editor de expressão (ícone de função). Selecione o ícone de raio para abrir a lista de conteúdo dinâmico.

    2. Na lista de conteúdo dinâmico, selecione os dados JSON que você deseja transformar.

      Neste exemplo, na lista de conteúdo dinâmico, em Quando uma solicitação HTTP é recebida, selecione o token Corpo, que representa a saída do conteúdo do corpo do gatilho.

      Captura de tela mostrando o fluxo de trabalho de consumo, a propriedade Content da ação Liquid, uma lista de conteúdo dinâmico aberta e o token Body selecionado.

  7. Na lista Mapa, selecione o modelo Liquid.

    Este exemplo continua com o modelo chamado JsonToJsonTemplate.

    Captura de tela mostrando o fluxo de trabalho de consumo, a propriedade Map da ação Liquid e o modelo selecionado.

    Observação

    Se a lista de mapas estiver vazia, o recurso do aplicativo lógico não estará vinculado à sua conta de integração ou sua conta de integração não conterá nenhum arquivo de mapa.

  8. Salve seu fluxo de trabalho. Selecione Salvar na barra de ferramentas do designer.

Testar seu fluxo de trabalho

Para disparar seu fluxo de trabalho, siga estas etapas:

  1. No gatilho Solicitação, localize a propriedade URL HTTP e copie a URL.

  2. Abra sua ferramenta de solicitação HTTP e use suas instruções para enviar uma solicitação HTTP para a URL copiada, incluindo o método esperado pelo gatilho de Solicitação.

    Este exemplo usa o método POST com a URL.

  3. Inclua a entrada JSON a ser transformada, por exemplo:

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  4. Depois que o fluxo de trabalho terminar de ser executado, vá para o histórico de execução do fluxo de trabalho e examine as entradas e saídas da ação Transformar JSON em JSON, por exemplo:

    Captura de tela mostrando o exemplo de saída.

Outras transformações Liquid

Você pode usar o Liquid para executar outras transformações, por exemplo:

Transformar o JSON em texto

O modelo Liquid a seguir mostra uma transformação de exemplo de JSON em texto:

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

O exemplo a seguir mostra as entradas e saídas de exemplo:

Captura de tela mostrando a saída de exemplo para a transformação JSON em texto.

Transformar XML em JSON

O modelo Liquid a seguir mostra uma transformação de exemplo de XML em JSON:

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

O loop JSONArrayFor é um mecanismo de looping personalizado para a entrada XML para que você possa criar cargas JSON que evitem uma vírgula à direita. Além disso, a condição where para esse mecanismo de loop personalizado usa o nome do elemento XML para comparação, em vez de o valor do elemento como outros filtros Liquid. Para obter mais informações, confira Aprofundar-se na política set-body – Coleções de coisas.

O exemplo a seguir mostra as entradas e saídas de exemplo:

Captura de tela mostrando o exemplo de saída da transformação XML para JSON.

Transformar XML em texto

O modelo Liquid a seguir mostra uma transformação de exemplo de XML em texto:

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

O exemplo a seguir mostra as entradas e saídas de exemplo:

Captura de tela mostrando o exemplo de saída do XML para a transformação de texto

Considerações sobre o modelo Liquid

  • Os modelos Liquid seguem os limites de tamanho do arquivo para mapas nos Aplicativos Lógicos do Azure.

  • A ação Transformar JSON em JSON segue a implementação de DotLiquid para Liquid. Essa implementação é uma porta para o .NET Framework da Implementação de Shopify para Liquid e difere em casos específicos.

    A lista a seguir descreve as diferenças conhecidas:

    • A ação Transformar JSON em JSON gera nativamente uma cadeia de caracteres, que pode incluir JSON, XML, HTML e assim por diante. A ação Liquid indica apenas que a saída de texto esperada do modelo Liquid é uma cadeia de caracteres JSON. A ação instrui o aplicativo lógico a analisar a entrada como um objeto JSON e aplica um wrapper para que Liquid possa interpretar a estrutura JSON. Após a transformação, a ação instrui seu aplicativo lógico a analisar a saída de texto de Liquid de volta para JSON.

      DotLiquid não entende nativamente o JSON, portanto, certifique-se de escapar o caractere de barra invertida (\) e outros caracteres JSON reservados.

    • Se o modelo usar filtros Liquid, siga as convenções de nomenclatura de DotLiquid e C#, que usam maiúsculas e minúsculas na frase. Para todas as transformações Liquid, verifique se os nomes de filtro em seu modelo também usam maiúsculas e minúsculas na frase. Caso contrário, os filtros não funcionarão.

      Por exemplo, quando você usar o filtro replace, use Replace, não replace. A mesma regra se aplicará se você experimentar exemplos no DotLiquid online. Para obter mais informações, confira Filtros Liquid de Shopify e Filtros Liquid DotLiquid. A especificação de Shopify inclui exemplos para cada filtro, portanto, para comparação, você pode experimentar esses exemplos em DotLiquid – Experimentar online.

    • O filtro json dos filtros de extensão de Shopify não está implementado no DotLiquid no momento. Normalmente, você pode usar esse filtro para preparar a saída de texto para a análise da cadeia de caracteres JSON, mas em vez disso, você precisará usar o filtro Replace.

    • O filtro Replace padrão na implementação de DotLiquid usa a correspondência de RegEx (expressão regular), enquanto a implementação de Shopify usa a correspondência de cadeia de caracteres simples. As duas implementações parecem funcionar da mesma forma até você usar um caractere reservado de RegEx ou um caractere de escape no parâmetro de correspondência.

      Por exemplo, para escapar o caractere de escape de barra invertida (\) reservado de RegEx, use | Replace: '\\', '\\' e não | Replace: '\', '\\'. Esses exemplos mostram como o filtro Replace se comporta de maneira diferente quando você tenta escapar o caractere de barra invertida. Embora esta versão funcione com êxito:

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

      Com este resultado:

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

      Esta versão falha:

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

      Com este erro:

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

      Para obter mais informações, confira Substituir a correspondência de padrão RegEx que usa o filtro padrão....

    • O filtro Sort na implementação de DotLiquid classifica itens em uma matriz ou coleção por propriedade, mas com essas diferenças: