Definição
Jolt Transformation é uma biblioteca e estrutura de transformação JSON que fornece um conjunto de operações, permitindo que um desenvolvedor converta uma estrutura JSON em outra.
Operações
default
Esta operação deve ser utilizada para adicionar novos elementos num JSON, caso eles não existam previamente.
shift
Esta operação deve ser utilizada para alterar a estrutura de um JSON mantendo os valores dos campos.
Considerações sobre a transformação:
- Os elementos que não forem incluídos no Spec de transformação foram descartados: o elemento "codigoSupervisor" não foi incluído no Spec, por isso foi descartado.
- Para criar os elementos "codigousur" e "nome", que são campos no JSON de Entrada dentro de um novo objeto "vendedor" no JSON de Saída, foi utilizada a conotação ponto ".", que permite definir o nível onde será criado o elemento no novo JSON. Do lado esquerdo do ponto informa-se o nome do objeto esperado, e do lado esquerdo o seu atributo.
- Para não descartar o elemento "status", precisei mantê-lo no Spec de transformação, repetindo o nome, indicando ao jolt que no JSON de saída deve permanecer com o mesmo nome (poderia ter utilizado também a conotação e comercial "&" - )
delete
Esta operação deve ser utilizada para remover elementos num JSON.
Os elementos que devem ser removidos devem ser incluídos no Spec de transformação com a atribuição vazio "".
modify-overwrite-beta
Esta operação deve ser utilizada para alteração dos valores dos elementos de um JSON por substituição ou através de funções oferecidas pela biblioteca do Jolt.
Além de sobrescrever valores, essa operação consegue também inserir novos elementos de forma similar à operação default.
Nesta operação os campos que não forem informados no Spec de transformação não serão descartados.
Considerações sobre a transformação:
- Não existiu descarte de elementos não informados no Spec de transformação, por exemplo o elemento "codigousur" foi mantido no Jolt de Saída.
- Alteração por substituição: foi utilizada como exemplo de alteração por substituição a modificação do valor do elemento "status", de "NORMAL" no Json de Entrada para "ATIVO" no Json de Saída.
- Alteração por função: foi utilizada como exemplo de alteração por função a modificação do valor do elemento "nome", pela conversão de maiúsculo para minúsculo através da função toLower..
- Para adição de um novo elemento com o valor dinâmico de outro elemento do Json, foi utilizada a anotação arroba "@" (o elemento "id" foi gerado a partir do valor do elemento "codigousur" , onde 1 é o nível do elemento "codigousur" no Json)
- Para adição de um novo elemento resultante da concatenação de um valor fixo com o valor dinâmico de outro elemento do Json , foi utilizada a função concat, e nela passamos como parâmetros o valor fixo "RCA-" e o valor dinâmico com anotação arroba "@" (conforme exemplo anterior).
- Para adição de um novo elemento com um valor fixo foi utilizado como exemplo o elemento .
Outras operações
As operações acima citadas são as mais utilizadas, porém a biblioteca do Jolt oferece outras operações.
Para mais informações: https://docs.digibee.com/documentation/v/pt-br/components/tools/transformer-jolt/transformer-conhecendo-o-jolt
Jolt no WSH
Introdução
O Jolt é um dos pilares do WSH.
Através da Biblioteca do Jolt, o WSH consegue se comunicar com qualquer API REST, usando as operações de transformação para realizar um depara entre um model de um serviço do WTA para um model de API externa.
Exemplo Integração de Estoque
API do WTA
Model de uma API do WTA de estoque
API externa
Model de uma API externa de estoque
Spec Transformação
Spec utilizada pelo WSH para converter o model da API do WTA no model da API externa
[ { "operation": "shift", "spec": { "*": "items[]" } }, { "operation": "shift", "spec": { "items": { "*": { "externalId": "items[&1].externalId", "distributionCentersStock": { "*": { "cnpj": "items[&3].estoques[&1].cnpjCD", "stocks": { "*": { "productCode": "items[&5].estoques[&3].produtos[&1].codigoExterno", "productEan": "items[&5].estoques[&3].produtos[&1].ean", "availableStock": "items[&5].estoques[&3].produtos[&1].disponivel", "transitStock": "items[&5].estoques[&3].produtos[&1].emTransito", "bloquedStock": "items[&5].estoques[&3].produtos[&1].noChao" } } } } } } } }, { "operation": "modify-overwrite-beta", "spec": { "items": { "*": { "estoques": { "*": { "produtos": { "*": { "codigoExterno": "=toString", "ean": "=toString" } } } } } } } }, { "operation": "modify-default-beta", "spec": { "items": { "*": { "idExterno": "@(1,externalId)" } } } }, { "operation": "shift", "spec": { "items": { "*": { "idExterno": "idExterno", "*": "itens[&1].&" } } } }, { "operation": "default", "spec": { "_attr_access": "itens" } } ]
Transformação
Ferramentas de apoio
Para auxiliar a criação de um Spect de transformação, serão utilizados duas ferramentas:
- Análise dos níveis do Json: https://jsonviewer.stack.hu/
- Validação do Spec de transformação: https://jolt-demo.appspot.com/#inception
Links para Cases de transformação
Links