JSON Stringify / Unstringify
Transforme um objeto JSON em uma string de uma linha só com aspas escapadas para incorporar em código, ou reverta uma string JSON escapada de volta para JSON legível.
1.008 visualizações
Como Funciona
Stringify pega um JSON real e o transforma em um literal de string de uma linha só, com aspas escapadas — o formato necessário para incorporar JSON dentro de outro campo JSON, um valor de configuração ou uma constante de string no código-fonte. Internamente, é exatamente isso que o JSON.stringify() do JavaScript faz: ele percorre o valor, coloca as strings entre aspas, escapa caracteres de controle e aspas internas, e serializa objetos e arrays em texto. Unstringify faz o inverso: cole uma string JSON escapada (com \" e \n) e receba de volta um JSON limpo, legível e indentado, equivalente a chamar JSON.parse() sobre ela e formatar o resultado.
Exemplo concreto: o objeto {"name":"Ada","tags":["a","b"]} vira o literal "{\"name\":\"Ada\",\"tags\":[\"a\",\"b\"]}" — cada aspas dupla interna recebe uma barra invertida na frente, para que tudo caiba dentro de um único par externo de aspas. É exatamente isso que acontece quando uma API embrulha um payload JSON como string dentro de outra resposta JSON (o corpo de um webhook, uma linha de log, uma coluna de banco de dados do tipo texto), ou quando um valor JSON precisa ser inserido em um arquivo YAML, uma variável de ambiente ou uma constante de string no código-fonte sem quebrar a sintaxe ao redor. O unstringify faz o caminho inverso: cole esse blob escapado e receba o original de volta, indentado e legível.
Vale conhecer alguns comportamentos do JSON.stringify() mesmo que você nunca use esta ferramenta específica: valores undefined e funções são silenciosamente descartados de propriedades de objetos (uma chave com valor undefined simplesmente desaparece), mas os mesmos valores dentro de um array são convertidos em null em vez de descartados, já que arrays precisam manter seu tamanho e as posições dos índices intactos. Objetos Date não são serializados como objetos — eles são convertidos, por meio do método toJSON(), em uma string ISO 8601 como "2024-01-15T10:30:00.000Z". E um valor que contém uma referência circular — um objeto que (diretamente ou por uma cadeia de propriedades) aponta de volta para si mesmo — não pode ser transformado em string de jeito nenhum: o JSON.stringify() real lança um TypeError: Converting circular structure to JSON, porque não existe uma string finita capaz de representar uma estrutura infinitamente aninhada.
O Que Você Precisa Saber
Fazer o stringify é uma operação com perdas em um sentido bem específico: tudo o que é silenciosamente descartado (funções, propriedades undefined, chaves Symbol) não pode ser recuperado depois com o unstringify — o ciclo completo só preserva o que o JSON válido já é capaz de representar, ou seja, strings, números, booleanos, null, objetos simples e arrays. No código real, o JSON.stringify() também aceita dois argumentos extras além do próprio valor: um replacer (uma função ou um array de nomes de chaves que controla exatamente quais propriedades são incluídas, ou como seus valores são transformados antes de serializar), e um parâmetro space (um número ou string que transforma a saída compacta de uma linha em um JSON indentado e legível para humanos — essa é exatamente a diferença entre uma resposta de API minificada e a versão bem formatada que um depurador mostra).
JSON codificado duas vezes é uma fonte comum de confusão: se um valor parece uma string JSON, mas o primeiríssimo caractere é uma aspas e ela está cheia de aspas internas escapadas com barra invertida, provavelmente ela passou por stringify duas vezes — uma vez pela aplicação, outra vez por uma camada que não percebeu que o payload já era uma string JSON. Passar por unstringify uma vez resolve a camada externa; se o resultado ainda parecer escapado, rode de novo.
Perguntas Frequentes
Qual é a diferença em relação ao JSON.stringify no código?
A mesma operação, só que como ferramenta interativa: cole um JSON real e receba a forma escapada em string que você normalmente produziria escrevendo JSON.stringify(obj) — útil quando você não tem um console à mão.
Por que eu precisaria fazer unstringify de um JSON?
APIs e logs às vezes aninham uma string JSON dentro de um campo JSON (JSON codificado duas vezes) — o unstringify converte essa string interna escapada de volta em JSON legível e analisável.
Por que uma propriedade desapareceu depois do stringify?
O JSON.stringify() omite silenciosamente propriedades de objeto cujo valor é undefined ou uma função — nenhum dos dois tem representação em JSON, então a chave é simplesmente descartada, em vez de ser serializada como null. O mesmo valor undefined dentro de um array vira null em vez de sumir, já que arrays precisam preservar seu tamanho e a ordem dos índices.
Por que aparece um erro de "estrutura circular"?
Se um objeto referencia a si mesmo, diretamente ou por uma cadeia de outros objetos, o JSON.stringify() não consegue gerar uma string finita para ele e lança um TypeError. Isso é comum ao serializar objetos que guardam uma referência de volta ao seu pai (um nó filho apontando para sua própria árvore, um elemento DOM, uma instância de classe com um campo "self") — a solução é remover ou substituir a propriedade circular antes de serializar, geralmente com uma função replacer.
Meus dados são enviados para algum lugar?
Não — as duas direções rodam localmente no seu navegador.
Ferramentas Semelhantes
Reportar um Problema
JSON Stringify / Unstringify
Comentários
Ainda não há comentários — seja o primeiro a escrever um!