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, você pode usar um gatilho de conector interno, um gatilho de conector gerenciado ou hospedado no Azure disponível para os 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 obter mais informações, examine a seguinte documentação:
- Executar operações de dados nos Aplicativos Lógicos do Azure
- Linguagem do modelo de código aberto Liquid
- Aplicativos lógicos de Consumo versus Standard
- Conectores internos da conta de integração
- Visão geral dos conectores internos dos Aplicativos Lógicos do Azure
- Visão geral dos conectores hospedados no Azure ou gerenciados para Aplicativos Lógicos do Azure e Conectores gerenciados ou hospedados no Azure nos Aplicativos Lógicos do Azure
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. Para saber mais, confira a documentação a seguir:
Ao trabalhar com o fluxo de trabalho de aplicativo lógico de consumo ou padrão, você precisará de 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.
Se você estiver trabalhando em um fluxo de trabalho de aplicativo lógico Standard, poderá vincular a conta de integração ao recurso do 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 pode enviar solicitações HTTP para testar sua solução, por exemplo:
- Visual Studio Code com uma extensão do Visual Studio Marketplace
- Invoke-RestMethod do PowerShell
- Microsoft Edge – ferramenta Console de Rede
- Bruno
- curl
Cuidado
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, funcione offline ou localmente, não sincronize seus dados com a nuvem e não exija que você entre em uma conta online. Dessa forma, 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.
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 de JSON em 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 -%} ] }
Salve o modelo usando a extensão de arquivo do modelo Liquid (.liquid). Este exemplo usa SimpleJsonToJsonTemplate.liquid.
Etapa 2: Carregar o modelo na linguagem Liquid
Após criar o modelo Liquid, você precisará carregar o modelo com base no seguinte cenário:
Se você estiver trabalhando em um fluxo de trabalho de aplicativo lógico de consumo, carregue o modelo em sua conta de integração.
Se você estiver trabalhando em um fluxo de trabalho de aplicativo lógico Standard, poderá carregar o modelo em sua conta de integração ou carregar o modelo no recurso do aplicativo lógico.
Carregar o modelo na conta de integração
No portal do Azure, entre com suas credenciais da conta do Azure.
Na caixa de pesquisa do portal do Azure, insira contas de integração e selecione Contas de integração.
Localize e selecione a conta de integração.
No menu de navegação da conta de integração, em Configurações, selecione Mapas.
No painel Mapas, selecione Adicionar. Forneça as seguintes informações sobre seu mapa:
Propriedade Valor Descrição Nome JsonToJsonTemplate
O nome de seu mapa, que é "JsontoJsonTemplate" neste exemplo Tipo de mapa Liquid O tipo do mapa. Para JSON para transformação de JSON, você deve selecionar Liquid. Map SimpleJsonToJsonTemplate.liquid
Um arquivo de modelo ou mapa Liquid existente para usar para a 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.
Carregar o modelo no aplicativo lógico Standard
No portal do Azure, encontre e abra seu recurso de aplicativo lógico. Verifique se você está no nível do recurso, não no nível do fluxo de trabalho.
No menu de navegação do recurso do aplicativo lógico, em Artifacts, selecione Mapas.
Na barra de ferramentas do painel Mapas, selecione Adicionar.
No painel Adicionar mapa, forneça as seguintes informações sobre seu modelo:
Propriedade Valor Descrição Nome JsonToJsonTemplate
O nome de seu mapa, que é "JsontoJsonTemplate" neste exemplo Tipo de mapa Liquid O tipo do mapa. Para JSON para transformação de JSON, você deve selecionar Liquid. Map SimpleJsonToJsonTemplate.liquid
Um arquivo de modelo ou mapa Liquid existente para usar para a 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. Quando terminar, selecione OK.
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.
No portal do Azure, abra o fluxo de trabalho de aplicativo lógico no designer, se ele ainda não estiver aberto.
Se o fluxo de trabalho não tiver um gatilho ou outras ações necessárias ao fluxo de trabalho, 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 for recebida.
No designer de fluxo de trabalho, na etapa em que você deseja adicionar a ação Liquid, selecione Nova etapa.
Na caixa de pesquisa Escolha uma operação, selecione Tudo. Na caixa de pesquisa, digite liquid.
Na lista de Ações, selecione a ação Liquid que você quer usar.
Este exemplo continua usando a ação chamada Transformar JSON em JSON.
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.
Clique dentro da caixa Conteúdo para que seja exibida a lista de conteúdo dinâmica.
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 for recebida, selecione o token Corpo, que representa a saída de conteúdo do corpo do gatilho.
Na lista Mapa, selecione o modelo Liquid.
Este exemplo continua com o modelo chamado JsonToJsonTemplate.
Observação
Quando a lista de mapas está vazia, isso significa que o recurso de aplicativo lógico não está vinculado à conta de integração ou que ela não contém arquivos de mapa.
Quando terminar, a ação será semelhante ao seguinte exemplo:
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:
No gatilho de Solicitação, localize a propriedade URL HTTP POST e copie a URL.
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.Inclua a entrada JSON a ser transformada, por exemplo:
{ "devices": "Surface, Mobile, Desktop computer, Monitors", "firstName": "Dean", "lastName": "Ledet", "phone": "(111)0001111" }
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:
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:
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:
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:
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
, useReplace
, nãoreplace
. 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 filtroReplace
.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 filtroReplace
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:Segue o comportamento de sort_natural do Shopify, não o comportamento de classificação do Shopify.
Classifica somente em ordem alfanumérica de cadeia de caracteres. Para obter mais informações, confira Numeric sort (Classificação numérica).
Usa ordem que não diferencia maiúsculas de minúsculas, não a ordem que diferencia. Para obter mais informações, confira O filtro de classificação não segue o comportamento de maiúsculas e minúsculas da especificação da Shopify.