Este guia tem como objetivo orientar o uso do componente JOLT, apresentando exemplos de uso reais para facilitar integrações.
O que é JOLT?
JOLT é uma biblioteca de transformação JSON poderosa e flexível que simplifica o processo de conversão entre diferentes estruturas de dados JSON. É possível mapear e transformar dados JSON rapidamente e com eficiência.
Estruturas JSON
O componente JOLT permite execuções e transformações complexas em estruturas JSON, como a renomeação de campos, filtragem de dados e reorganização de objetos por exemplo.
Como funciona a biblioteca de transformação?
A biblioteca Jolttransformation trabalha com base no princípio da "especificação por exemplo". É possível fornecer um exemplo de dados JSON de origem e um exemplo JSON de destino que são dados para definir a desejada transformação.
Como converter estruturas JSON?
Com a utilização do JOLT é possível definir um arquivo JSON de transformação que específica regras de conversão entre as estruturas de origem e destino. O componente irá aplicar estas regras para converter os dados JSON de acordo.
Diferentes tipos de transformação
O componente JOLT suporta vários tipos de transformação, como:
- Transformação de objeto a objeto;
- Transformação de array para array;
- Transformação da matriz Objectto e vice versa.
Exemplos de transformação
Abaixo trazemos alguns exemplo de transformações que podem ser realizadas com JOLT.
- Renomear campos;
- Filtrar dados;
- Reorganizar objetos;
- Agrupar várias estruturas JSON.
Características avançadas
O componente JOLT oferece vários recursos avançados, como expressões, funções personalizadas que permite executar tarefas complexas e transformações precisas.
Vantagens de usar JOLT
O componente JOLT oferece várias vantagens como:
- Simplicidade no uso;
- Alta performance;
- Flexibilidade e extensibilidade;
- Compatibilidade com estruturas JSON;
- Extensa documentação e comunidade de apoio.
Exemplos de usos
Veja abaixo vários exemplos de uso e dicas que vamos apresentar nesta documentação. Execute os testes clicando aqui.
Entrada JSON:
{ "HelloWord":2024 }
[ { "operation":"shift", "spec":{ "HelloWord":"Hello" } } ]
Saída
{ "HelloWord":2024 }
Lista de introdução
Exemplo de uso DE\PARA em listas;
Entrada JSON:
{ "people":[ { "name":"Jonh", "age":30 }, { "name":"Mary", "age":25 } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "people":{ "*":{ "name":"[&1].first_name", "age":"[&1].age" } } } } ]
- Na operação Shift quando definimos "*" o objetivo é acessar todos os elementos da lista de pessoas;
- Com [&1] é definido a lista no destino e seus elementos se organizam.
Saída:
[ { "first_name":"Jonh", "age":30 }, { "first_name":"Mary", "age":25 } ]
- Exemplo de uso onde uma lista será convertida em outra lista, neste caso nome será o termo das propriedades alvo:
Entrada JSON:
{ "names":[ "John", "Jane", "Jack" ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "names":{ "*":{ "@":"[&1].name" } } } } ]
- Quando acessamos o nome da lista com "*", iteramos para todos os elementos;
- Com "@" definimos genericamente os nomes de todos os elementos da lista "nomes".
Saída:
[ { "name":"John" }, { "name":"Jane" }, { "name":"Jack" } ]
- Lista de origem "nomes" com elementos que possuem campos com nomes definidos. Lista de destino "itens" com nomes diferentes:
Entrada JSON:
{ "names":[ { "name":"John" }, { "name":"Jane" }, { "name":"Jack" } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "names":{ "*":{ "@":"items[&1]" } } } } ]
- Com "@" definimos genericamente os nomes de todos os elementos da lista "nomes";
- Com "items[&1]" definimos a lista "items" na saída.
Saída:
{ "items":[ { "name":"John" }, { "name":"Jane" }, { "name":"Jack" } ] }
- Lista de fontes (nomes) com elementos que possuem campos com nomes definidos:
Entrada JSON:
{ "names":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "names":{ "*":{ "name":"items[&1].name", "age":"items[&1].age" } } } } ]
- Quando utilizamos o nome dos campos (nome, idade) temos melhor controle sobre cada um deles.
Saída:
{ "items":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
- Para mostrar apenas valores na lista, remova os nomes de destino (ListName[&1].name)( ListName[&1]???)
Entrada JSON:
{ "names":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "names":{ "*":{ "name":"ListName[&1]", "age":"ListAge[&1]" } } } } ]
- Observe que as listas de destino (ListName[&1] e ListName[&1]) não possuem nomes de campos definidos;
- No próximo exemplo mostraremos os campos definidos.
Saída:
{ "ListName":["John","Jane","Jack"], "ListAge":[25,30,35] }
- Com nomes de campo.
Entrada JSON:
{ "names":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "names":{ "*":{ "name":"ListName[&1].name", "age":"ListAge[&1].age" } } } } ]
- Aqui definimos o nome dos campos (nome e idade) e são exibidos na saída.
Saída:
{ "ListName":[ { "name":"John" }, { "name":"Jane" }, { "name":"Jack" } ], "ListAge":[ { "age":25 }, { "age":30 }, { "age":35 } ] }
- Unifique duas listas "ListName" e "ListAge" em uma lista de destino PersonalData.
Entrada JSON:
{ "ListName":[ { "name":"John" }, { "name":"Jane" }, { "name":"Jack" } ], "ListAge":[ { "age":25 }, { "age":30 }, { "age":35 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "ListName":{ "*":{ "name":"PersonalData[&1].name" } }, "ListAge":{ "*":{ "age":"PersonalData[&1].age" } } } } ]
- Observe que acessamos ListName e ListAge acessamos os campos nome e idade e a lista de destino é definida como PersonalData[&1];
- Os campos do destino são o nome e a idade.
Saída:
{ "PersonalData":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
- Adicione um campo nos elementos da lista de destino. Capture o valor do campo fora da lista "BossName" na operação modificar-substituir-beta.
Entrada JSON:
{ "BossName":"Elisabeth", "PersonalData":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "BossName":"BossName", "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "BossName":"@(1,BossName)", "PersonalData":{ "*":{ "BossName":"@(3,BossName)" } } } } ]
- Na Operação "modify-overwrite-beta" acessamos o campo BossName desta forma @(1,BossName)";
- Lembre-se que o campo BossName está em posição raiz no json, portanto é acesso com nível "@(1,"
- Observe que na lista Dados Pessoais acessamos o campo BossName com número 3 no parâmetro de nível de definição
desta forma "@(3,BossName)".
Saída:
{ "BossName":"Elisabeth", "PersonalData":[ { "name":"John", "age":25, "BossName":"Elisabeth" }, { "name":"Jane", "age":30, "BossName":"Elisabeth" }, { "name":"Jack", "age":35, "BossName":"Elisabeth" } ] }
- O valor do campo BossName foi passado para o campo BossName em todos os elementos da lista BossName.
Entrada JSON:
{ "BossName":"Elisabeth", "BossLastName":"Kemp", "PersonalData":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
Json Spec:
{ "BossName":"Elisabeth", "BossLastName":"Kemp", "PersonalData":[ { "name":"John", "age":25 }, { "name":"Jane", "age":30 }, { "name":"Jack", "age":35 } ] }
- Na Operação modificar-overwrite-beta o valor do Campo BossName foi concatenado com o campo "Nome do chefe".
- O método concat pode receber vários parâmetros separados por vírgulas. O nível é definido de acordo com a localização do campo.
=concat(@(,Param),'-',@(,Param), '+', @(,Param))
- O Campo FullName foi criado e passado para o campo BossName ("@(3,FullName)") em todos os elementos da lista PersonalData. O resultado"BossName":"ElisabethKemp"
Saída:
[ { "operation":"shift", "spec":{ "BossName":"BossName", "BossLastName":"BossLastName", "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "BossName":"@(1,BossName)", "FullName":"=concat(@(1,BossName),' ',@(1,BossLastName))", "PersonalData":{ "*":{ "BossName":"@(3,FullName)" } } } } ]
- O objetivo é remover os campos BossName e BossLastName após ingressar e criar o campo fullName para não exibilo na saída.
Entrada JSON:
{ "BossName":"Elisabeth", "BossLastName":"Kemp", "PersonalData":[ { "name":"John", "age":25, "BossName":"Elisabeth Kemp" }, { "name":"Jane", "age":30, "BossName":"Elisabeth Kemp" }, { "name":"Jack", "age":35, "BossName":"Elisabeth Kemp" } ], "FullName":"Elisabeth Kemp" }
Json Spec:
[ { "operation":"shift", "spec":{ "BossName":"BossName", "BossLastName":"BossLastName", "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "BossName":"@(1,BossName)", "FullName":"=concat(@(1,BossName),' ',@(1,BossLastName))", "PersonalData":{ "*":{ "BossName":"@(3,FullName)" } } } }, { "operation":"remove", "spec":{ "BossName":"", "BossLastName":"", "FullName":"" } } ]
- Observe que na operação remova os campos BossName, BossLastName e FullName, isso nos dá um resultado mais limpo.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "BossName":"Elisabeth Kemp" }, { "name":"Jane", "age":30, "BossName":"Elisabeth Kemp" }, { "name":"Jack", "age":35, "BossName":"Elisabeth Kemp" } ] }
- A lista de destino é formada por dois campos da lista de origem.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "passportData":"Passport123", "personId":10 }, { "name":"Jane", "age":30, "passportData":"Passport456", "personId":20 }, { "name":"Jack", "age":35, "passportData":"Passport789", "personId":30 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "passportData":"PersonalData[&].documents[].passportData", "personId":"PersonalData[&1].documents[].personId" } } } } ]
- Observe que usamos o elemento “documentos” e para indicar que é uma lista adicionamos [] no final do nome.
- Então adicionamos o nome do elemento de destino documentos[].passportData e documentos[].personId.
- Detalhe muito importante: os elementos do array são separados.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "documents":[ { "passportData":"Passport123" }, { "personId":10 } ] }, { "name":"Jane", "age":30, "documents":[ { "passportData":"Passport456" }, { "personId":20 } ] }, { "name":"Jack", "age":35, "documents":[ { "passportData":"Passport789" }, { "personId":30 } ] } ] }
- SoWeHave the List Documents Inside List Personaldata
- Introdução especificação de choque com dois turnos de operação. A lista de destino é formada por dois campos da lista de origem.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "passportData":"Passport123", "personId":10 }, { "name":"Jane", "age":30, "passportData":"Passport456", "personId":20 }, { "name":"Jack", "age":35, "passportData":"Passport789", "personId":30 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "passportData":"PersonalData[&1].documents.passportData", "personId":"PersonalData[&1].documents.personId" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "personId":"PersonalData[&1].personId", "documents":{ "@":"PersonalData[&2].documents[]" } } } } } ]
- Nesta abordagem temos campos dentro do mesmo elemento;
- Quando utilizamos as operações SHIFT a segunda é executada com o resultado da primeira;
- O primeiro Shift transforma os campos Passportdata e Personid em um objeto que possui 2 propriedades;
- O segundo Shift transforma o objeto em uma lista;
- Com o caractere @ defini que a origem serão todos os elementos e o destino será uma lista chamada documentos [];
- O uso de &2 significa que estamos dentro de um objeto;
- Observe que para definir a lista PesonalData out object use &1e inside object &2;
- Quando você não mostra as informações no local desejado, o nível (&1, &2) não está definido corretamente;
- Altere estes elementos para teste e mostre o resultado.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "documents":[ { "passportData":"Passport123", "personId":10 } ] }, { "name":"Jane", "age":30, "documents":[ { "passportData":"Passport456", "personId":20 } ] }, { "name":"Jack", "age":35, "documents":[ { "passportData":"Passport789", "personId":30 } ] } ] }
- Nosso objetivo é criar uma lista de destinos com uma lista dentro com outra abordagem.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "documents":[ { "passportData":"Passport123", "personId":10 } ], "personId":10 }, { "name":"Jane", "age":30, "documents":[ { "passportData":"Passport456", "personId":20 } ], "personId":20 }, { "name":"Jack", "age":35, "documents":[ { "passportData":"Passport789", "personId":30 } ], "personId":30 } ] }
Json Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "personId":"PersonalData[&1].personId", "documents":{ "*":{ "passportData":"PersonalData[&1].ListOfDocuments[&1].passportData", "personId":"PersonalData[&3].ListOfDocuments[&1].personId" } } } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "personId":10, "ListOfDocuments":[ { "passportData":"Passport123", "personId":10 } ] }, { "name":"Jane", "age":30, "personId":20, "ListOfDocuments":[ { "passportData":"Passport456", "personId":20 } ] }, { "name":"Jack", "age":35, "personId":30, "ListOfDocuments":[ { "passportData":"Passport789", "personId":30 } ] } ] }
- As vezes, as listas possuem elementos com informações fixas e imutáveis. Acessaremos as informações definindo o índice de lista de cada elemento.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "documents":[ { "passportData":"Passport123", "personId":10 }, { "Address":"Washington Street" } ] }, { "name":"Jane", "age":30, "documents":[ { "passportData":"Passport456", "personId":20 }, { "Address":"Washington Street" } ] }, { "name":"Jack", "age":35, "documents":[ { "passportData":"Passport789", "personId":30 }, { "Address":"Riverside Drive" } ] } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "documents":{ "0":{ "passportData":"PersonalData[&3].passport" }, "1":{ "Address":"PersonalData[&3].AdressData" } } } } } } ]
- Observe que ao acessar os elementos da lista usamos "*" e para acessar o primeiro elemento usamos "0";
- Desta forma acessamos as informações do campo Dados do passaporte e transformamos em passaporte;
- Este exemplo tem uma forma diferente de definir o campo em Dado Pessoais, utilize o &3 pois estamos dentro do listar documentos;
- Não é obrigatório acessar os elementos da sequência como no exemplo;
- Este exemplo só será útil para casos onde a lista de origem possui elementos que não mudam de lugar dinamicamente. Os elementos devem estar sempre em posições fixas.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"Passport123", "AdressData":"Washington Street" }, { "name":"Jane", "age":30, "passport":"Passport456", "AdressData":"Washington Street" }, { "name":"Jack", "age":35, "passport":"Passport789", "AdressData":"Riverside Drive" } ] }
- Neste exemplo, definimos o valor do campo de destino com dados de um campo de origem.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "documents":[ { "Type":"Passport", "value":"123", "personId":10 }, { "Address":"Washington Street" } ] }, { "name":"Jane", "age":30, "documents":[ { "Type":"Passport", "value":"456", "personId":20 }, { "Address":"Washington Street" } ] }, { "name":"Jack", "age":35, "documents":[ { "Type":"Passport", "value":"789", "personId":30 }, { "Address":"Riverside Drive" } ] } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "documents":{ "*":{ "@value":"PersonalData[&3].@Type", "@Address":"PersonalData[&3].AddressDestiny" } } } } } } ]
- Veja que obtemos os valores do campo @ +fildName="@Value" e o valor do campo "@Type", para isso usamos o "@";
- No primeiro elemento da lista Documentos o resultado é "Tipo": "Passaporte" e "valor": "123" e a saída é ("Passaporte": "123".
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"Washington Street" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"Washington Street" }, { "name":"Jack", "age":35, "Passport":"789", "AddressDestiny":"Riverside Drive" } ] }
- Se precisarmos separar uma string que seja um endereço, por exemplo, usamos a função Split.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA" } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split(',',@(1,AddressDestiny))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList" } } } } ]
- No primeiro argumento definimos os caracteres que representam a separação entre as palavras, no caso o ',' (vírgula entre aspas simples) ("=split(',',@(1,AddressDestiny))")
- A especificação da operação "modify-default-beta" é composta por um objeto JSON que contém uma ou mais propriedades. Cada propriedade pode ser existente no objeto de dados ou uma nova propriedade que deve ser criada;
- Se a propriedade especificada já existir no objeto de dados, a operação "modify-default-beta" substitui o valor da propriedade com o valor especificado. Se a propriedade especificada não existir no objeto de dados, a operação "modify-default-beta" cria uma nova propriedade com o valor especificado.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", " Washington", " DC20500", " EUA" ] }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400 Defense Blvd", " Washington", " VA20301", " EUA" ] } ] }
- Para obter o primeiro elemento da lista que criamos com o split veja abaixo.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", " Washington", " DC20500", " EUA" ] }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400 Defense Blvd", " Washington", " VA20301", " EUA" ] } ] }
Jolt Spec:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA" } ] }
- Para obter o primeiro elemento da lista criada em divisão usamos o método firstElement;
- Criamos a rua variável;
- var ="=firstElement(@(1,ParameterList))"
Saída:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split(',',@(1,AddressDestiny))", "Street":"=firstElement(@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "Street":"PersonalData[&1].Street" } } } } ]
- Para obter o último elemento da lista que criamos com o split veja abaixo.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", " Washington", " DC20500", " EUA" ], "Street":"1600 Pennsylvania" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400Defense Blvd", " Washington", " VA20301", " EUA" ], "Street":"1400 Defense Blvd" } ] }
Jolt Spec:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC 20500, EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA 20301, EUA" } ] }
- Para obter o último elemento da lista usamos o método lastElement criamos a variável País.
"var" = "=lastElement(@(1,ParameterList))"
Saída:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split(',',@(1,AddressDestiny))", "Country":"=lastElement(@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "Country":"PersonalData[&1].Country" } } } } ]
- Para obter o segundo elemento da lista veja abaixo.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", " Washington", " DC20500", " EUA" ], "Country":" EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400 Defense Blvd", " Washington", " VA20301", " EUA" ], "Country":" EUA" } ] }
Jolt Spec:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA" } ] }
- Para obter a capital do endereço que é o segundo elemento usamos o método metod elementAt onde definimos a posição do índice.
"var": "=elementAt(indexPositionHere,@(,ParameterList))"
Saída:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split(',',@(1,AddressDestiny))", "Capital":"=elementAt(1,@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "Capital":"PersonalData[&1].Capital" } } } } ]
- Para obter todos os elementos um por um veja abaixo.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", " Washington", " DC20500", " EUA" ], "Capital":" Washington" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400 Defense Blvd", " Washington", " VA20301", " EUA" ], "Capital":" Washington" } ] }
Json Spec:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA" } ] }
Saída:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split(',',@(1,AddressDestiny))", "Street":"=elementAt(0,@(1,AddressDestinyList))", "Capital":"=elementAt(1,@(1,AddressDestinyList))", "ZipCode":"=elementAt(2,@(1,AddressDestinyList))", "Country":"=elementAt(3,@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "Street":"PersonalData[&1].Street", "Capital":"PersonalData[&1].Capital", "ZipCode":"PersonalData[&1].ZipCode", "Country":"PersonalData[&1].Country" } } } } ]
- Após dividr uma string, existe um método que pode unir todos os elementos da lista.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", " Washington", " DC20500", " EUA" ], "Street":"1600 Pennsylvania", "Capital":" Washington", "ZipCode":" DC20500", "Country":" EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400 Defense Blvd", " Washington", " VA20301", " EUA" ], "Street":"1400 Defense Blvd", "Capital":" Washington", "ZipCode":" VA20301", "Country":" EUA" } ] }
Jolt Spec
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA" } ] }
- Com o método Join podemos juntar as palavras com o caractere que queremos;
- O caractere definido é |(pipe);
"var": "=join('parameterCaracterHere',@(,parameterList))"
Saída:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split(', ',@(1,AddressDestiny))", "AddressJoin":"=join(' | ',@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "AddressJoin":"PersonalData[&1].AddressJoin" } } } } ]
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania, Washington, DC20500, EUA", "AddressDestinyList":[ "1600 Pennsylvania", "Washington", "DC20500", "EUA" ], "AddressJoin":"1600 Pennsylvania | Washington | DC20500| EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd, Washington, VA20301, EUA", "AddressDestinyList":[ "1400 Defense Blvd", "Washington", "VA20301", "EUA" ], "AddressJoin":"1400 Defense Blvd | Washington | VA20301| EUA" } ] }
Jolt Spec:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania\r\nWashington\r\nDC20500\r\nEUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd\r\nWashington\r\nVA20301\r\nEUA" } ] }
- Digamos que o endereço esteja separado por /r/n;
- Usamos split para separar as palavras com o caracter [\r\n];
- Observe que neste exemplo usamos o caracter [(colchetes);
- Usamos colchetes antes e depois do caractere /r/n e juntando palavras com o caracter spacewhite "".
Saída:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split('[\r\n]',@(1,AddressDestiny))", "AddressJoin":"=join(' ',@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "AddressJoin":"PersonalData[&1].AddressJoin" } } } } ]
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania\r\nWashington\r\nDC20500\r\nEUA", "AddressDestinyList":[ "1600 Pennsylvania", "", "Washington", "", "DC20500", "", "EUA" ], "AddressJoin":"1600 Pennsylvania Washington DC20500 EUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd\r\nWashington\r\nVA20301\r\nEUA", "AddressDestinyList":[ "1400 Defense Blvd", "", "Washington", "", "VA20301", "", "EUA" ], "AddressJoin":"1400 Defense Blvd Washington VA20301EUA" } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split('\"',@(1,AddressDestiny))", "AddressJoin":"=join(' ',@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "AddressJoin":"PersonalData[&1].AddressJoin" } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania\"Washington\"DC20500\"nEUA", "AddressDestinyList":[ "1600 Pennsylvania", "Washington", "DC20500", "nEUA" ], "AddressJoin":"1600 Pennsylvania Washington DC20500 nEUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd\"Washington\"VA20301\"EUA", "AddressDestinyList":[ "1400 Defense Blvd", "Washington", "VA20301", "EUA" ], "AddressJoin":"1400 Defense Blvd Washington VA20301EUA" } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania'Washington'DC20500'nEUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd'Washington'VA20301'EUA" } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinyList":"=split('['']',@(1,AddressDestiny))", "AddressJoin":"=join(' ',@(1,AddressDestinyList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].Passport", "AddressDestiny":"PersonalData[&1].AddressDestiny", "AddressDestinyList":"PersonalData[&1].AddressDestinyList", "AddressJoin":"PersonalData[&1].AddressJoin" } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania'Washington'DC20500'nEUA", "AddressDestinyList":[ "1600 Pennsylvania", "Washington", "DC20500", "nEUA" ], "AddressJoin":"1600 Pennsylvania Washington DC20500nEUA" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd'Washington'VA20301'EUA", "AddressDestinyList":[ "1400 Defense Blvd", "Washington", "VA20301", "EUA" ], "AddressJoin":"1400 Defense Blvd Washington VA20301EUA" } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]\\" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]\\" } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "emailList":"=split('\\\\',@(1,email))", "emailFirstElement":"=firstElement(@(1,emailList))", "emailJoin":"=join('',@(1,emailList))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "emailList":"PersonalData[&1].emailList", "emailJoin":"PersonalData[&1].email", "emailFirstElement":"PersonalData[&1].emailFirstElement" } } } } ]
- Usamos duas maneiras de obter o valor do campo e-mail;
- Onewith join -"emailJoin":"=join('',@(1,emailList))"
- Dois com fisrtElement-"emailFirstElement":"=firstElement(@(1,emailList))"
- Como a lista criada possui um elemento, sabemos que no e-mail não há palavra após \(barra invertida). Então a lista tem um elemento.
- Você pode escolher qual dos métodos utilizar.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500EUA", "emailList":[ "[email protected]" ], "email":"[email protected]", "emailFirstElement":"[email protected]" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "emailList":[ "[email protected]" ], "email":"[email protected]", "emailFirstElement":"[email protected]" } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]//" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]//" } ] }
Jolt Spec:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]//" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]//" } ] }
- Usamos duas maneiras de obter o valor do campo e-mail;
- Onewith join -"emailJoin":"=join('',@(1,emailList))"
- Dois com fisrtElement-"emailFirstElement":"=firstElement(@(1,emailList))"
- Como a lista criada possui um elemento sabemos que no e-mail não há palavra após /(barra);
- Então a lista tem um elemento;
- Você pode escolher qual dos métodos utilizar.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "emailList":[ "[email protected]" ], "email":"[email protected]", "emailFirstElement":"[email protected]" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "emailList":[ "[email protected]" ], "email":"[email protected]", "emailFirstElement":"[email protected]" } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":180 }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":120 } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "weightConverted":"=divide(@(1,weight),2.205)" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weightConverted":"PersonalData[&1].kilogram" } } } } ]
- O cálculo matemático que está sendo realizado é a divisão. A fórmula =divide(@(,weight),.) divide o valor da propriedade peso por 2,205;
- A parte 2,205 da fórmula é o fator de conversão entre libras e quilogramas. Um quilograma equivale a aproximadamente 2.205 libras.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "kilogram":81.63265306122449 }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "kilogram":54.42176870748299 } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":180 }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":120 } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "weightConverted":"=divide(@(1,weight),2.205)", "weightInt":"=toInteger(@(1,weightConverted))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weightOrigin", "weightConverted":"PersonalData[&1].weightConverted", "weightInt":"PersonalData[&1].kilogram" } } } } ]
- Temos três campos na saída;
- Peso único com o valor original 180lb;
- Dois -weightConvertido com o resultado da conversão de lb para quilograma;
- Três -weightInt com o resultado da conversão de lb para quilograma e inteiro convertido.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "weightOrigin":180, "weightConverted":81.63265306122449, "kilogram":81 }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "weightOrigin":120, "weightConverted":54.42176870748299, "kilogram":54 } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":180 }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":null } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "weightConverted":"=divide(@(1,weight),2.205)" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weightOrigin", "weightConverted":"PersonalData[&1].kiloGram" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "PersonalData":{ "*":{ "kiloGram":[ "=toInteger", 0 ] } } } } ]
- Na operação modificar-overwrite-beta podemos definir a conversão para toInteger "kiloGram": ["=toInteger", 0];
- E podemos definir um valor padrão "quiloGram": ["=toInteger", parâmetroDefaultValueHere] se o valor do campo quiloGram for nulo o valor 0 é definido, veja no elemento Jane campo quiloGram.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "weightOrigin":180, "kiloGram":81 }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "weightOrigin":null, "kiloGram":0 } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":180 }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":null } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "weightConverted":"=divide(@(1,weight),2.205)" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weightOrigin", "weightConverted":"PersonalData[&1].kiloGram" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "PersonalData":{ "*":{ "kiloGram":[ "=toString", "0" ] } } } } ]
- Na operação modificar-overwrite-beta podemos definir a conversão para toString "kiloGram": ["=toString", "0"]
- E podemos definir um valor padrão "quiloGram": ["=toString", parâmetroDefaultValueHere]se o valor do campo quiloGram for nulo o valor "0" é definido, veja no elemento Jane campo quiloGram.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "weightOrigin":180, "kiloGram":"81.63265306122449" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1600 Defense Blvd Washington VA20301 EUA", "weightOrigin":null, "kiloGram":"0" } ] }
- Quando precisamos adicionar dois campos decimais usamos o doubleSum.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC 20500 EUA", "email":"[email protected]", "weight1":90, "weight2":90 }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA 20301 EUA", "email":"[email protected]", "weight1":60, "weight2":null } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "weight":"=doubleSum(@(1,weight1),@(1,weight2))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weight" } } } } ]
- Se um dos valores for nulo, o parâmetro do método será 0, veja no elemento Jane.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "weight":180.0 }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "weight":60.0 } ] }
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":90 }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":60 } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weight" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "countElements":"=size(@(1,PersonalData))", "PersonalData":{ "*":{ "countAddress":"=size(@(1,addressDestiny))" } } } } ]
- Digamos que precisamos contar quantos elementos temos na lista PersonalData, então usamos o size;
- Criamos a variável countElements;
- Em outro caso, precisamos saber quantas letras uma propriedade de um elemento da lista possui;
- Criamos a variável countAddress.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "countAddress":41, "weight":90 }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "weight":60, "countAddress":41 } ], "countElements":2 }
- Se precisamos converter um campo do formato string para double para manter as casas decimais, usamos o dobrar.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":"90.155" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":"60.122" } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weight" } } } }, { "operation":"modify-overwrite-beta", "spec":{ "PersonalData":{ "*":{ "weight":[ "=toDouble", 0 ] } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "weight":90.155 }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "weight":60.122 } ] }
- Em vários casos precisamos enviar campos obrigatórios para um sistema alvo, por isso utilizamos a operação Default.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]", "weight":"90.155", "countryOriginList":[ { "addressOrigin":"Street1", "countryRegion":"Brazil" } ] }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]", "weight":null } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weight", "countryOriginList":"PersonalData[&1].countryOriginList" } } } }, { "operation":"default", "spec":{ "PersonalData[]":{ "*":{ "surName":"empty", "countryOriginList[]":{ "0":{ "addressOrigin":"empty", "countryRegion":"empty" }, "*":{ "addressOrigin":"empty", "countryRegion":"empty" } } } } } } ]
- Com isso temos os novos campos surName, countryOriginList, countryRegion, addressOrigin, todos definidos com o valor padrão "empy" caso o campo não exista na origem ou possua o valor nulo;
- Um detalhe importante é que o nome da lista deve conter colchetes para definir os valores da lista de destino “Dados Pessoais[]”;
- Os valores podem ser int, double, bool, string, null, list;
- Observe que na lista paísOrigem é definida por padrão se não existir na origem, na elemento Jane é criada com campos vazios e no elemento John mantém os dados de origem porque possui valores;
- Este procedimento é necessário quando o sistema alvo possui esta lista como obrigatória para integração.
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "weight":"90.155", "countryOriginList":[ { "addressOrigin":"Street1", "countryRegion":"Brazil" } ], "surName":"empty" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "weight":null, "countryOriginList":[ { "countryRegion":"empty", "addressOrigin":"empty" } ], "surName":"empty" } ] }
- Quando precisamos completar os caracteres de uma variável com um número específico à esquerda, usamos leftPad. Isso é necessário quando o sistema de destino exige que o campo tenha 10 caracteres, como no exemplo;
- Neste caso usamos zero, mas outro caractere pode ser usado.
"var": "=leftPad(@(,parameterFieldOrigin),parameterLimitOfCaracters,'caracterForComplement')"
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]" } ] }
Jolt Spec:
[ { "operation":"modify-overwrite-beta", "spec":{ "PersonalData":{ "*":{ "PassportLeftPad":"=leftPad(@(,Passport),10,'0')" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "PassportLeftPad":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny", "weight":"PersonalData[&1].weight", "countryOriginList":"PersonalData[&1].countryOriginList" } } } } ]
Saída:
"PersonalData":[ { "name":"John", "age":25, "passport":"0000000123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA" }, { "name":"Jane", "age":30, "passport":"0000000456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA" } ] }
- Quando precisamos completar os caracteres de uma variável com um número específico à direita, usamos rightPad. Isso é necessário quando o sistema de destino exige que o campo tenha 10 caracteres, como no exemplo.
- Neste caso usamos zero, mas outro caractere pode ser usado.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]" } ] }
Jolt Spec:
[ { "operation":"modify-overwrite-beta", "spec":{ "PersonalData":{ "*":{ "PassportLeftPad":"=rightPad(@(1,Passport),10,0'')" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "PassportLeftPad":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny" } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"1230000000", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA" }, { "name":"Jane", "age":30, "passport":"4560000000", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA" } ] }
- Quando precisamos enviar a mesma informação de um campo na origem para dois ou mais campos no destino, podemos fazer desta forma, como no exemplo do campo Passaporte no campo operação.
"OriginField": [ "DestinyField", "DestinyField" ]
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]" } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":[ "PersonalData[&1].passportDestiny", "PersonalData[&1].passportOrigin" ], "AddressDestiny":"PersonalData[&1].addressDestiny" } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passportDestiny":"123", "passportOrigin":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA" }, { "name":"Jane", "age":30, "passportDestiny":"456", "passportOrigin":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA" } ] }
- Quando estivermos no sistema alvo precisamos limitar o tamanho de um campo para que não tenhamos um erro String ou binário ou os dados seriam truncados.
"var": "=substring(@(,parameterFieldOrigin), parâmetroStartIndex, parâmetroRange)"
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]" } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "AddressDestinySubstring":"=substring(@(1,AddressDestiny),0,20)" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "name":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestinySubstring":"PersonalData[&1].addressDestiny" } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Wa" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Wa" } ] }
- Quando o campo de origem contém caracteres em branco desnecessários, usamos trim para limpar esses espaços em branco.
Entrada JSON:
{ "PersonalData":[ { "name":"John ", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]" }, { "name":"Jane ", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]" } ] }
Jolt Spec:
[ { "operation":"modify-default-beta", "spec":{ "PersonalData":{ "*":{ "nameTrim":"=trim(@(1,name))" } } } }, { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "nameTrim":"PersonalData[&1].name", "age":"PersonalData[&1].age", "Passport":"PersonalData[&1].passport", "AddressDestiny":"PersonalData[&1].addressDestiny" } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC20500 EUA" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA20301 EUA" } ] }
- Neste exemplo, se acessarmos o campo "@(0,idade)" se a idade for igual a 25, entramos na condição e pegamos os valores dos campos e montamos o elemento na lista de destino. No ponto em que definimos o "*" no mesmo nível do campo "@(0,age)", todos os outros elementos cujo valor de idade não é 25 entrará nesta condição;
- A lista de destino altera o número do nível para PersonalData[&3];
- E acessar os valores dos campos dentro do if também altera o número do nível para 2"@(2,nome)";
- Se errar o nível de acesso do if, dos campos ou da lista de destinos, não funcionará;
- Recomendamos que faça alguns testes sem a lista de alvos para entender se o if está funcionando;
- Tudo isso nos permite criar um novo campo com nova informação para todos os elementos com idade igual ou superior a 25 anos, como é o caso com FieldTest.
Entrada JSON:
{ "PersonalData":[ { "name":"John", "age":25, "Passport":"123", "AddressDestiny":"1600 Pennsylvania Washington DC20500 EUA", "email":"[email protected]" }, { "name":"Jane", "age":30, "Passport":"456", "AddressDestiny":"1400 Defense Blvd Washington VA20301 EUA", "email":"[email protected]" } ] }
Jolt Spec:
[ { "operation":"shift", "spec":{ "PersonalData":{ "*":{ "@(0,age)":{ "25":{ "@(2,name)":"PersonalData[&3].name", "@(2,age)":"PersonalData[&3].age", "@(2,Passport)":"PersonalData[&3].passport", "@(2,AddressDestiny)":"PersonalData[&3].addressDestiny", "#ValueTest":"PersonalData[&3].FieldTest" }, "*":{ "@(2,name)":"PersonalData[&3].name", "@(2,age)":"PersonalData[&3].age", "@(2,Passport)":"PersonalData[&3].passport", "@(2,AddressDestiny)":"PersonalData[&3].addressDestiny" } } } } } } ]
Saída:
{ "PersonalData":[ { "name":"John", "age":25, "passport":"123", "addressDestiny":"1600 Pennsylvania Washington DC2500 EUA", "FieldTest":"ValueTest" }, { "name":"Jane", "age":30, "passport":"456", "addressDestiny":"1400 Defense Blvd Washington VA2301 EUA" } ] }