Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice
exclude.*ndice



...

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

Deck of Cards
historyfalse
idsample
Card
id1
labelExemplo DE\PARA simples

Entrada JSON:

Bloco de código
{
   "HelloWord":2024
}
Bloco de código
[
   {
      "operation":"shift",
      "spec":{
         "HelloWord":"Hello"
      }
   }
]

Saída

Bloco de código
{
   "HelloWord":2024
}

Lista de introdução

...

Exemplo de uso DE\PARA em listas;

Deck of Cards
historyfalse
idsample
Card
id1
labelLista de destino sem nome e campo

Entrada JSON:

Bloco de código
{
   "people":[
      {
         "name":"Jonh",
         "age":30
      },
      {
         "name":"Mary",
         "age":25
      }
   ]
}


Jolt Spec:

Bloco de código
[
   {
      "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:

Bloco de código
[
   {
      "first_name":"Jonh",
      "age":30
   },
   {
      "first_name":"Mary",
      "age":25
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelExemplo de lista convertida em outra lista
  • Exemplo de uso onde uma lista será convertida em outra lista, neste caso nome será o termo das propriedades alvo:


Entrada JSON:

Bloco de código
{
   "names":[
      "John",
      "Jane",
      "Jack"
   ]
}


Jolt Spec:

Bloco de código
[
   {
      "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:

Bloco de código
[
   {
      "name":"John"
   },
   {
      "name":"Jane"
   },
   {
      "name":"Jack"
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelListas de origem (nomes) com elementos campos
  • Lista de origem "nomes" com elementos que possuem campos com nomes definidos. Lista de destino "itens" com nomes diferentes:


Entrada JSON:

Bloco de código
{
   "names":[
      {
         "name":"John"
      },
      {
         "name":"Jane"
      },
      {
         "name":"Jack"
      }
   ]
}


Jolt Spec:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "items":[
      {
         "name":"John"
      },
      {
         "name":"Jane"
      },
      {
         "name":"Jack"
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelLista de fontes (nome) com elementos campos
  • Lista de fontes (nomes) com elementos que possuem campos com nomes definidos:


Entrada JSON:

Bloco de código
{
   "names":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


Jolt Spec:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "items":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelLista de origem "nomes" Destino duas listas "ListName" e "ListAge"
  • Para mostrar apenas valores na lista, remova os nomes de destino (ListName[&1].name)( ListName[&1]???) 


Entrada JSON:

Bloco de código
{
   "names":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


Json Spec:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "ListName":["John","Jane","Jack"],
   "ListAge":[25,30,35]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelLista de origem "nomes" destino duas listas "ListName" e "ListAge"
  • Com nomes de campo.


Entrada JSON:

Bloco de código
{
   "names":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


Json Spec:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "ListName":[
      {
         "name":"John"
      },
      {
         "name":"Jane"
      },
      {
         "name":"Jack"
      }
   ],
   "ListAge":[
      {
         "age":25
      },
      {
         "age":30
      },
      {
         "age":35
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelUnifique duas listas "ListName" e "ListAge"
  • Unifique duas listas "ListName" e "ListAge" em uma lista de destino PersonalData.


Entrada JSON:

Bloco de código
{
   "ListName":[
      {
         "name":"John"
      },
      {
         "name":"Jane"
      },
      {
         "name":"Jack"
      }
   ],
   "ListAge":[
      {
         "age":25
      },
      {
         "age":30
      },
      {
         "age":35
      }
   ]
}


Json Spec:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "PersonalData":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelModificar-substituir-beta
  • 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:

Bloco de código
{
   "BossName":"Elisabeth",
   "PersonalData":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


Json Spec:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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. 


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelConcatenar nome e sobrenome

Entrada JSON:

Bloco de código
{
   "BossName":"Elisabeth",
   "BossLastName":"Kemp",
   "PersonalData":[
      {
         "name":"John",
         "age":25
      },
      {
         "name":"Jane",
         "age":30
      },
      {
         "name":"Jack",
         "age":35
      }
   ]
}


Json Spec:

Bloco de código
{
   "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.
Bloco de código
=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:

Bloco de código
[
   {
      "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)"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelOperação remover
  • 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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "PersonalData":[
      {
         "name":"John",
         "age":25,
         "BossName":"Elisabeth Kemp"
      },
      {
         "name":"Jane",
         "age":30,
         "BossName":"Elisabeth Kemp"
      },
      {
         "name":"Jack",
         "age":35,
         "BossName":"Elisabeth Kemp"
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelCrie uma lista dentro de outra lista
  • A lista de destino é formada por dois campos da lista de origem.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelOutra abordagem: crie uma lista dentro de outra lista
  • 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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
            }
         ]
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelLista de origem com outra lista
  • Nosso objetivo é criar uma lista de destinos com uma lista dentro com outra abordagem.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
            }
         ]
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelElemento de acesso fixado na lista
  • 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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelElemento de uma lista que possui o tipo de informação em propriedade
  • Neste exemplo, definimos o valor do campo de destino com dados de um campo de origem.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsamples
Card
id1
labelDividir e modificar default-beta
  • Se precisarmos separar uma string que seja um endereço, por exemplo, usamos a função Split.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
         ]
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelPrimeiro elemento
  • Para obter o primeiro elemento da lista que criamos com o split veja abaixo.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelÚltimo elemento
  • Para obter o último elemento da lista que criamos com o split veja abaixo.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
{
   "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. 
Bloco de código
"var" = "=lastElement(@(1,ParameterList))"


Saída:

Bloco de código
[
   {
      "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"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelSegundo elemento
  • Para obter o segundo elemento da lista veja abaixo.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
{
   "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. 
Bloco de código
"var": "=elementAt(indexPositionHere,@(,ParameterList))"


Saída:

Bloco de código
[
   {
      "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"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelTodos os elementos
  • Para obter todos os elementos um por um veja abaixo.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelUnir elementos
  • Após dividr uma string, existe um método que pode unir todos os elementos da lista.


Entrada JSON:

Bloco de código
{
   "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

Bloco de código
{
   "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);
Bloco de código
"var": "=join('parameterCaracterHere',@(,parameterList))"


Saída:

Bloco de código
[
   {
      "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"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelDividir e como remover /r/n

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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"
            }
         }
      }
   }
]


...

Deck of Cards
historyfalse
idsample
Card
id1
labelRemover aspas duplas

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelRemover cotação

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelRemover barra invertida

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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]"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelRemover barra /

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
{
   "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:

Bloco de código
{
   "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]"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelDividir

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelPara inserir na modificação beta padrão

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelTratamento nulo

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelModificar e substituir beta

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelSoma dupla
  • Quando precisamos adicionar dois campos decimais usamos o doubleSum.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelTamanho

Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelDobrar
  • Se precisamos converter um campo do formato string para double para manter as casas decimais, usamos o dobrar.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelPadrão
  • Em vários casos precisamos enviar campos obrigatórios para um sistema alvo, por isso utilizamos a operação Default.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelleftPad
  • 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.


Bloco de código
"var":
"=leftPad(@(,parameterFieldOrigin),parameterLimitOfCaracters,'caracterForComplement')"


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
"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"
   }
]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelrightPad
  • 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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelUm campo de origem dois campos de destino
  • 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.


Bloco de código
"OriginField": [ "DestinyField", "DestinyField" ]


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelSubstring
  • 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.


Bloco de código
"var": "=substring(@(,parameterFieldOrigin), parâmetroStartIndex, parâmetroRange)"


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "PersonalData":[
      {
         "name":"John",
         "age":25,
         "passport":"123",
         "addressDestiny":"1600 Pennsylvania Wa"
      },
      {
         "name":"Jane",
         "age":30,
         "passport":"456",
         "addressDestiny":"1400 Defense Blvd Wa"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelTrim
  • Quando o campo de origem contém caracteres em branco desnecessários, usamos trim para limpar esses espaços em branco.


Entrada JSON:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}


...

Deck of Cards
historyfalse
idsample
Card
id1
labelIF
  • 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:

Bloco de código
{
   "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:

Bloco de código
[
   {
      "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:

Bloco de código
{
   "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"
      }
   ]
}