Entendendo a recursividade no JSONata
Last updated
Last updated
A seguir, apresentaremos um exemplo que define a recursividade para navegar e transformar uma estrutura JSON. Este artigo irá detalhar o exemplo inicial e expandi-lo com explicações adicionais, exemplos práticos e casos de uso, proporcionando uma compreensão abrangente da aplicação de recursividade no JSONata.
A linha acima define uma função recursiva chamada $person. A função recebe um nó ($node) como argumento. Ela retorna um objeto contendo:
"n": Name - A propriedade Name do nó atual.
"p": $person(Parent.Person) - O resultado da chamada da função $person na propriedade Parent.Person do nó atual, permitindo a navegação recursiva.
Esta parte aplica a função $person ao campo "Person" do contexto atual (denotado por $). O operador ~> canaliza o campo "Person" através da função $person.
Vamos aprimorar o exemplo adicionando mais campos para transformação e navegando em estruturas JSON mais profundamente aninhadas. Considere a seguinte estrutura JSON mais complexa:
Vamos modificar a função para incluir a propriedade "Age" e tratar casos em que "Parent" pode estar ausente.
A função modificada agora inclui "a": Age para capturar a idade de cada pessoa.
O operador ternário ($exists($person(Parent.Person)) ? ... : null) garante que a função retorne "null" se o nó não estiver presente, evitando erros ao navegar na hierarquia.
Aplicar a consulta expandida ao exemplo de entrada JSON resultará em:
Vamos considerar um exemplo onde cada pessoa pode ter irmãos.
Podemos expandir ainda mais nossa função para incluir irmãos:
Explicação
A linha"s": $exists($person(Siblings)) ? $person(Siblings) : null mapeia o array Siblings e transforma cada irmão em um objeto.
Exemplo de Saída
Aplicar a consulta expandida ao exemplo de entrada JSON resultará em:
A função recursiva no JSONata fornece uma maneira poderosa de navegar e transformar estruturas JSON aninhadas. Ao definir e aplicar tais funções, você pode percorrer dados hierárquicos, tratar campos opcionais e até mesmo mapear arrays para produzir transformações complexas e automatizadas.