Achatar e o que um documento aninhado precisa antes de poder encontrar algo que nao tem conceito de anidacao: um arquivo de ambiente, uma coluna de planilha, um catalogo de traducao, qualquer coisa construida a partir de pares chave-valor sem estrutura propria.
Usando o achatador de JSON
Escolha uma direcao e um estilo de caminho, ja que nao existe um padrao
unico para como um caminho achatado deve ser escrito. Tres formas sao
oferecidas, a.b.0, a/b/0 e a.b[0], e a ferramenta indica qual esta
em uso ao inves de escolher uma silenciosamente.
Achamento de
{"user":{"name":"Ana","tags":["a","b"]},"empty":{}}
com o estilo pontilhado retorna:
{
"user.name": "Ana",
"user.tags.0": "a",
"user.tags.1": "b",
"empty": {}
}
Chaves aninhadas se tornam caminhos pontilhados, elementos de array recebem seu indice adicionado, e o objeto vazio e mantido como valor por direito proprio ao inves de desaparecer, porque sem ele nao haveria nada para dar um caminho e o documento nao sobreviveria a viagem de ida e volta.
Dois casos genuinamente ambiguos, tratados abertamente
Uma chave que ja contem o caractere separador produziria um caminho que
ninguem poderia reler corretamente, entao a ferramenta a recusa por nome:
uma chave como "a.b" no estilo pontilhado e rejeitada com uma mensagem
que nomeia a chave e sugere um estilo de caminho diferente, ao inves de
silenciosamente produzir um caminho quebrado.
Na outra direcao, desachatando, um segmento de caminho feito apenas de digitos poderia significar tanto um indice de array quanto uma chave de objeto que e numerica, e nada em um documento achatado diz qual. “Digitos sao indices de array” e um interruptor exatamente por essa razao: errar na suposicao transforma um objeto com chaves por ano em um array com milhares de posicoes vazias.
Viagem de ida e volta
Desachatar o exemplo acima, com o mesmo estilo de caminho, retorna o documento original exato: o objeto aninhado, o array de dois elementos em sua ordem original, e o objeto vazio preservado ao inves de eliminado. Essa viagem de ida e volta e a verdadeira prova de que os pontos e indices de um estilo de caminho foram lidos corretamente, porque uma suposicao errada sobre a indexacao de arrays geralmente so aparece quando voce converte de volta e compara com o original.
Manter contenedores vazios
Desativar isso elimina objetos e arrays vazios completamente ao inves de mantê-los como entradas achatadas, o que e util quando a forma achatada esta indo para um lugar que nao pode conter um valor vazio de jeito nenhum, como certos formatos de arquivo de ambiente.