Árvore de páginas




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"
                                                                                          }
                                                                                       ]
                                                                                    }