JSON

JSON Path Extractor / Flatten

Achatar (Flatten) um JSON aninhado em uma lista plana de "caminho: valor" e remontá-lo em uma estrutura aninhada (Unflatten). A notação de caminho é a mesma usada em JSONPath/JSON Diff: store.book[0].price.

Deeply nested JSON is hard to compare or iterate over programmatically. Flatten unrolls such a structure into a flat list of "path: value" pairs (e.g. store.book[0].price: 12.99), and Unflatten rebuilds it.

How to use it

Common uses

Things to keep in mind

Array index notation varies between libraries — this tool uses items[0], though some write items.0 without brackets.

Unflatten requires that paths don't conflict with each other (e.g. one and one.two at the same time) — otherwise the structure can't be unambiguously rebuilt.

Artigo sobre esta ferramenta: JSON Flatten: transformar uma estrutura aninhada em uma lista plana

Perguntas frequentes

O que "achatar" (flatten) um objeto JSON realmente faz?

Converte objetos e arrays aninhados em um objeto de nível único com chaves em notação de ponto ou colchete (como user.address.city ou items[0].id), tornando dados profundamente aninhados mais fáceis de ler como uma tabela plana ou importar em ferramentas de planilha.

Um JSON achatado pode ser convertido de volta à sua forma aninhada original?

Sim, desde que a notação de chaves seja consistente — reverter o processo reconstrói a estrutura aninhada original dividindo cada caminho de chave de volta em objetos e arrays.

Achatar perde alguma informação do JSON original?

Não. Todo valor é preservado; apenas a estrutura muda, já que cada caminho aninhado único se torna sua própria chave plana.

O que acontece se uma chave real contiver um ponto?

Essa é uma situação ambígua: o caminho user.name pode significar tanto um objeto aninhado {"user": {"name": ...}} quanto uma chave plana {"user.name": ...}. A notação de pontos não faz essa distinção, por isso essas chaves devem ser evitadas ou tratadas separadamente.

O formato dos caminhos é o mesmo em todas as ferramentas semelhantes?

Não. A notação de ponto para objetos (user.name) é praticamente universal, mas a notação de índices de array varia: aqui é usado items[0], enquanto algumas bibliotecas escrevem items.0 sem colchetes.

Artigos: JSON