"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que JSON.stringify retorna um objeto vazio ao serializar um erro?

Por que JSON.stringify retorna um objeto vazio ao serializar um erro?

Publicado em 2025-01-21
Navegar:197

Why Does JSON.stringify Return an Empty Object When Serializing an Error?

É impossível stringificar um erro usando JSON.stringify?

A tentativa de serializar uma instância de erro usando JSON.stringify resulta em um objeto vazio. Esse comportamento surge dos descritores de propriedades ocultas do erro.

Por que JSON.stringify falha:

Descritores de propriedades para instâncias de erro são definidos com enumerável: false, evitando sua propriedades sejam incluídas na stringificação.

Explorando propriedades e descritores:

const error = new Error('sample message');
const propertyNames = Object.getOwnPropertyNames(error);
propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));

Output:

stack { get: [Function], set: [Function], enumerable: false, configurable: true }
arguments { value: undefined, writable: true, enumerable: false, configurable: true }
type { value: 'custom message', writable: true, enumerable: false, configurable: true }
message { value: 'custom message', writable: true, enumerable: false, configurable: true }

Solução alternativa usando Object.getOwnPropertyNames:

Para incluir propriedades de erro em stringificação, use JSON.stringify(err, Object.getOwnPropertyNames(err)). Isso fornece acesso a propriedades não enumeráveis.

const serializedError = JSON.stringify(error, Object.getOwnPropertyNames(error));

Soluções alternativas adicionais:

  • Objetos de erro personalizados: Crie objetos de erro personalizados com as propriedades desejadas e serialize aqueles.
  • Extração de propriedade: Extraia propriedades de erro específicas manualmente usando error.stack e error.message.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3