
Índice
Introdução
Nesse post iremos abordar sobre Erros e Exceções em JSON no Delphi.
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que se tornou um padrão amplamente utilizado em APIs e comunicação entre sistemas. No Delphi, lidar com JSON pode parecer simples, mas é essencial entender como tratar erros e exceções para garantir que seu código seja robusto e confiável. Neste artigo, vamos explorar técnicas para tratar erros comuns ao manipular JSON e oferecer algumas dicas de depuração e resolução de problemas.
Lidando com Erros Comuns ao Manipular JSON
Manipular JSON no Delphi envolve a utilização de bibliotecas como System.JSON
ou SuperObject
, entre outras. Apesar de essas ferramentas serem poderosas, erros podem ocorrer devido a diversas razões, como formatação incorreta, dados inesperados ou tentativas de acessar propriedades inexistentes. Vamos examinar alguns dos erros mais comuns e como evitá-los.
1. Formatação Inválida de JSON
Um dos problemas mais frequentes ao trabalhar com JSON é a formatação incorreta. Um simples caractere fora de lugar pode causar um erro ao tentar analisar (parsear) a string JSON.
Exemplo de Código:
var JSONString: string; JSONObject: TJSONObject; begin JSONString := '{"nome": "João", "idade": 30, "ativo": true'; // Falta o fechamento do JSON try JSONObject := TJSONObject.ParseJSONValue(JSONString) as TJSONObject; if JSONObject = nil then raise Exception.Create('Erro ao analisar o JSON: Formatação inválida.'); except on E: Exception do ShowMessage('Exceção: ' + E.Message); end; end;
Neste exemplo, a string JSON está incorreta devido à ausência do fechamento de colchetes. O código tenta analisar o JSON e, ao falhar, lança uma exceção personalizada.
Como evitar:
- Sempre valide o JSON antes de tentar parseá-lo.
- Utilize ferramentas online para verificar a validade do JSON.
- Ao receber JSON de fontes externas, verifique se o conteúdo está completo.
2. Acesso a Propriedades Inexistentes
Outro erro comum ocorre quando tentamos acessar uma propriedade que não existe no JSON. Isso pode acontecer se o JSON não estiver no formato esperado ou se a estrutura tiver mudado.
Exemplo de Código:
var JSONString: string; JSONObject: TJSONObject; begin JSONString := '{"nome": "João", "idade": 30}'; //JSON sem a propriedade "sobrenome" try JSONObject := TJSONObject.ParseJSONValue(JSONString) as TJSONObject; if JSONObject.GetValue('sobrenome') = nil then raise Exception.Create('Erro: Propriedade "sobrenome" não encontrada.'); except on E: Exception do ShowMessage('Exceção: ' + E.Message); end; end;
Aqui, estamos tentando acessar a propriedade “sobrenome”, que não existe no JSON fornecido. O código verifica a existência da propriedade antes de acessá-la, evitando um erro potencial.
Como evitar:
- Verifique a existência das propriedades antes de acessá-las.
- Use métodos como
GetValue
com um valor padrão para evitar exceções. - Considere o uso de
Try...Except
para capturar e tratar exceções de forma elegante.
3. Conversão de Tipos Incompatíveis
Ao trabalhar com JSON, é comum precisar converter tipos de dados. No entanto, se a conversão for feita de forma incorreta ou se o JSON contiver um valor inesperado, isso pode causar problemas.
Exemplo de Código:
var JSONString: string; JSONObject: TJSONObject; Idade: Integer; begin JSONString := '{"nome": "João", "idade": "trinta"}'; // Idade é uma string e não um inteiro try JSONObject := TJSONObject.ParseJSONValue(JSONString) as TJSONObject; if JSONObject.GetValue('idade').TryGetValue(Idade) then Writeln('Idade: ' + IntToStr(Idade)) else raise Exception.Create('Erro ao converter a idade para inteiro.'); except on E: Exception do ShowMessage('Exceção: ' + E.Message); end; end;
Neste exemplo, o JSON contém a idade como uma string inválida (“trinta”), que não pode ser convertida para um inteiro. O código tenta fazer a conversão e trata o erro adequadamente.
Como evitar:
- Sempre verifique o tipo dos dados antes de tentar convertê-los.
- Use
Try...Except
para capturar exceções de conversão. - Valide os dados JSON antes de processá-los.
Veja abaixo a ilustração do projeto:

Código fonte do exemplo
Você pode fazer o download do exemplo do projeto através do repositório do github:
https://github.com/Gisele-de-Melo/Erros_Excecoes_JSON
Conclusão
Manipular JSON no Delphi pode ser uma tarefa desafiadora, especialmente quando se trata de lidar com erros e exceções. No entanto, com as técnicas certas, você pode tornar seu código mais robusto e resiliente a falhas. Ao implementar validações, usar o depurador, adicionar logging e criar testes unitários, você estará mais preparado para lidar com qualquer problema que surja ao trabalhar com JSON. Lembre-se de que a prevenção de erros e a depuração eficiente são habilidades essenciais para qualquer desenvolvedor Delphi.
Não esquece de deixar um comentário caso esse conteúdo tenha te agregado conhecimento de alguma forma. Valeu!