Como resolver o erro de TypeError: Converting circular structure to JSON?

O erro TypeError: Converting circular structure to JSON ocorre quando você tenta converter um objeto que contém uma referência circular para JSON.

O erro TypeError: Converting circular structure to JSON acontece quando você tenta transformar um objeto JavaScript em uma string JSON, mas o objeto contém uma referência circular. Em outras palavras, um dos objetos referenciados dentro do seu objeto principal aponta de volta para o próprio objeto ou a algum outro objeto, criando um loop infinito. Esse tipo de estrutura não pode ser representado em JSON e, portanto, gera esse erro.

Aqui está um exemplo de como esse erro pode ocorrer:

let obj = {};
obj.self = obj;
JSON.stringify(obj); // TypeError: Converting circular structure to JSON

No exemplo acima, o objeto obj contém uma referência a si mesmo, o que cria uma estrutura circular. Ao tentar usar JSON.stringify nesse objeto, o JavaScript não consegue processá-lo corretamente e lança o erro.

Como corrigir?

Uma forma de resolver esse problema é remover a referência circular antes de tentar a conversão para JSON. Você pode fazer isso manualmente ou usando uma biblioteca de utilitários que ajuda a tratar esse tipo de situação. Uma solução simples é usar uma função como JSON.stringify() com uma função de substituição para ignorar as referências circulares, por exemplo:

let obj = {};
obj.self = obj;

function replacer(key, value) {
  if (value === obj) {
    return undefined;
  }
  return value;
}

console.log(JSON.stringify(obj, replacer)); // '{}'

No código acima, o replacer ignora a referência circular e garante que o JSON.stringify funcione sem erros.

Esse erro pode ser muito frustrante ao lidar com objetos complexos que podem ter referências circulares, como grafos ou listas encadeadas. A solução mais simples é usar funções como JSON.stringify() com um parâmetro de substituição para tratar essas referências e garantir que a conversão para JSON seja bem-sucedida. Algumas bibliotecas, como o flatted, foram criadas para resolver esse tipo de problema automaticamente.

Algumas aplicações:

  • Certifique-se de que os objetos não possuem referências circulares antes de convertê-los em JSON.
  • Use a função JSON.stringify() com um parâmetro de substituição para evitar o erro.
  • Considere usar bibliotecas de terceiros, como flatted, para lidar com objetos complexos e suas referências circulares de forma automática.

Dicas para quem está começando

  • Evite criar referências circulares em objetos sempre que possível.
  • Use console.log para depurar e verificar a estrutura dos seus objetos antes de tentar convertê-los para JSON.
  • Se precisar trabalhar com referências circulares, considere usar uma abordagem como o replacer no JSON.stringify().

Contribuições de Ricardo Vasconcellos

Compartilhe este tutorial: Como resolver o erro de TypeError: Converting circular structure to JSON?

Compartilhe este tutorial

Continue aprendendo:

Como corrigir o erro Uncaught ReferenceError: X is not a function ao usar callbacks?

O erro `Uncaught ReferenceError: X is not a function` ocorre quando você tenta invocar uma função que não está definida ou não é reconhecida pelo JavaScript.

Tutorial anterior

O que é o erro Uncaught TypeError: X is not a function em um código assíncrono?

O erro `Uncaught TypeError: X is not a function` acontece quando o JavaScript tenta invocar algo como uma função, mas o valor não é uma função.

Próximo tutorial