Validando e Parseando JSON com Segurança usando Try/Catch em JavaScript
Manipular strings JSON de fontes externas (como APIs ou localStorage) pode interromper a execução do JavaScript se o formato retornado for inválido. Este snippet demonstra como encapsular o JSON.parse em um bloco try...catch, garantindo um parse seguro que trata exceções sem derrubar a aplicação.
JavaScript
/**
* Realiza o parse seguro de uma string JSON retornando um valor padrão em caso de erro
* @param {string} jsonString - Texto em formato JSON a ser validado
* @param {any} fallbackValue - Valor de retorno caso o JSON seja inválido
* @returns {any} Objeto/Valor convertido ou o fallbackValue
*/
function safeJsonParse(jsonString, fallbackValue = null) {
try {
// Tenta converter a string para objeto/valor JS
return JSON.parse(jsonString);
} catch (error) {
// Captura o SyntaxError sem interromper o fluxo da aplicação
console.warn('Falha ao parsear JSON:', error.message);
return fallbackValue;
}
}
// Exemplos práticos de uso:
// 1. JSON Válido
const dadosValidos = '{"usuario": "Ana", "ativo": true}';
const usuario = safeJsonParse(dadosValidos, {});
console.log('Resultado 1 (Válido):', usuario.usuario); // "Ana"
// 2. JSON Inválido (Sintaxe incorreta - aspas simples ou vírgula sobrando)
const dadosInvalidos = '{ usuario: "Ana", }';
const fallback = safeJsonParse(dadosInvalidos, { erro: true });
console.log('Resultado 2 (Inválido):', fallback); // { erro: true }
Pontos-chave
- Prevenção de
SyntaxError: A função nativaJSON.parse()lança uma exceção síncrona do tipoSyntaxErrorse a string contiver erros de formatação, o que paralisa o script caso não seja tratado. - Valor de Contingência (
Fallback): O parâmetrofallbackValuepermite definir um retorno padrão seguro (comonull,{}ou[]), evitando erros secundários deTypeError: Cannot read properties of undefinedno restante do código. - Formatação Estrita do JSON: Lembre-se de que o padrão JSON exige aspas duplas (
") em chaves e valores do tipo texto; aspas simples ou vírgulas no final de objetos causam falha no parse. - Performance: O bloco
try...catchpossui um custo computacional insignificante para casos de uso comuns, tornando essa abordagem ideal para tratar respostas não confiáveis de APIs externas ou entradas de usuário.
