Como Procurar uma Informação em um JSON no Delphi

O JSON (“JavaScript Object Notation”) é um formato leve e eficiente para troca de dados, amplamente utilizado em aplicações modernas, especialmente em integrações com APIs. No Delphi, há diversas formas de manipular JSON e buscar informações dentro desse formato. Este guia apresenta as principais técnicas e exemplos práticos.
Introdução ao Tratamento de JSON no Delphi
O Delphi fornece suporte nativo para manipulação de JSON através da unit System.JSON. Os principais componentes utilizados incluem:
TJSONObject: Representa um objeto JSON.TJSONArray: Representa um array JSON.TJSONValue: Classe base para qualquer valor JSON (objeto, array, string, número, etc.).
Com essas ferramentas, é possível parsear strings JSON e acessar valores diretamente.
Como Buscar uma Informação no JSON
2.1. Utilizando GetValue
O método GetValue é ideal para acessar valores por caminho de chaves. Aqui está um exemplo:
var
JSONData: string;
JSONObject: TJSONObject;
Value: string;
begin
JSONData := '{"user": {"name": "Giovani", "age": 30}}';
JSONObject := TJSONObject.ParseJSONValue(JSONData) as TJSONObject;
try
Value := JSONObject.GetValue<string>('user.name');
ShowMessage(Value); // Exibe "Giovani"
finally
JSONObject.Free;
end;
end;
Iterando Sobre Arrays
Se o JSON contém um array, como no exemplo abaixo, é necessário iterar para acessar os valores:
{
"users": [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 30}
]
}
No Delphi:
var
JSONData: string;
JSONObject: TJSONObject;
JSONArray: TJSONArray;
i: Integer;
UserName: string;
begin
JSONData := '{"users": [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]}';
JSONObject := TJSONObject.ParseJSONValue(JSONData) as TJSONObject;
try
JSONArray := JSONObject.GetValue<TJSONArray>('users');
for i := 0 to JSONArray.Count - 1 do
begin
UserName := JSONArray.Items[i].GetValue<string>('name');
ShowMessage(UserName);
end;
finally
JSONObject.Free;
end;
end;
Tratando Erros
Ao trabalhar com JSON, é importante validar os dados para evitar exceções. Use try...except para lidar com erros durante o parse:
try
JSONObject := TJSONObject.ParseJSONValue(JSONData) as TJSONObject;
if JSONObject = nil then
raise Exception.Create('JSON inválido.');
except
on E: Exception do
ShowMessage('Erro ao processar JSON: ' + E.Message);
end;
Algumas Dicas
Caminhos Hierárquicos
O método GetValue suporta caminhos hierárquicos, como no exemplo:
Value := JSONObject.GetValue<string>('user.address.city');
Conversão de Tipos
Se o JSON contém valores numéricos ou booleanos, use os métodos de conversão apropriados:
Age := JSONObject.GetValue<Integer>('user.age');
Inclusão de Valores
Para incluir valores em um JSON:
JSONObject.GetValue<TJSONObject>('user').AddPair('name', 'Carlos');
Melhorando a busca
Vamos considerar o seguinte Json para exemplo
[
{
"usuario 1":{
"username":"aaa",
"email":"[email protected]"
}
},
{
"usuario 2":{
"username":"bbb",
"email":"[email protected]"
}
}
]
Neste exemplo, temos um JSON no formato de array, onde cada registro contém um identificador e uma lista de campos com seus respectivos valores.
Chave: usuario 1
Campos:
username: aaa
email: [email protected]
Chave: usuario 2
Campos:
username: bbb
email: [email protected]
Agora, surge a pergunta: como localizar rapidamente o e-mail do usuário 2? Vamos explorar uma forma simples e eficiente de realizar essa busca!
Função para procurar informações no JSON
function getData(JsonString: String; Node: String; Field: String): String;
var
JSonValue: TJSonValue;
JsonArray: TJSONArray;
ArrayElement: TJSonValue;
FoundValue: TJSonValue;
begin
Result :='';
// create TJSonObject from string
JsonValue := TJSonObject.ParseJSONValue(JsonString);
// get the array
JsonArray := JsonValue as TJSONArray;
// iterate the array
for ArrayElement in JsonArray do
begin
FoundValue := ArrayElement.FindValue(Node);
if FoundValue <> nil then
begin
Result := ArrayElement.GetValue(Node + '.' + Field);
Break;
end;
end;
end;
Com o código acima fica muito fácil procurar informações no JSON, veja abaixo um exemplo completo.
Código Completo Buscando informações do JSON
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TMomo1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Momo1: TMomo1;
implementation
{$R *.dfm}
uses
System.Json;
function getData(JsonString: String; Node: String; Field: String): String;
var
JSonValue: TJSonValue;
JsonArray: TJSONArray;
ArrayElement: TJSonValue;
FoundValue: TJSonValue;
begin
Result :='';
// create TJSonObject from string
JsonValue := TJSonObject.ParseJSONValue(JsonString);
// get the array
JsonArray := JsonValue as TJSONArray;
// iterate the array
for ArrayElement in JsonArray do
begin
FoundValue := ArrayElement.FindValue(Node);
if FoundValue <> nil then
begin
Result := ArrayElement.GetValue(Node + '.' + Field);
Break;
end;
end;
end;
procedure TMomo1.Button1Click(Sender: TObject);
begin
Memo1.Text :=
' [ '+
' { '+
' "usuario 1":{ '+
' "username":"aaa", '+
' "email":"[email protected]" '+
' } '+
' }, '+
' { '+
' "usuario 2":{ '+
' "username":"bbb", '+
' "email":"[email protected]" '+
' } '+
' } '+
' ] ';
{ Buscando o conteúdo do campo email do registro usuário 1 }
ShowMessage(getData(Memo1.Text, 'usuario 1', 'email'));
{ Buscando o conteúdo do campo username do registro usuário 2 }
ShowMessage(getData(Memo1.Text, 'usuario 2', 'username'));
end;
end.
Conclusão
A manipulação de JSON no Delphi é uma habilidade essencial para desenvolvedores que trabalham com integrações modernas. Usando System.JSON, é possível buscar, alterar e validar dados JSON com eficácia. Também podemos ver como utilizando a função getData disponível neste artigo agiliza ainda mais nosso trabalho.
Fonte base: https://showdelphi.com.br/como-procurar-uma-informacao-em-um-json/
📣 Sua opinião é muito importante!
Gostou do artigo? Tem dúvidas, sugestões ou algo a acrescentar? ✍️💡 Escreva nos comentários abaixo! 👇
Adoramos interagir com você, ouvir suas ideias e aprender com seu feedback. Vamos conversar! ☕✨
💻 Compartilhe o post com outros desenvolvedores Delphi se ele te ajudou! 😊
📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩💻 🔍✨
Até o próximo post. Valeu! 👋📖
#JSON #Delphi #Desenvolvimento #Programação
#APIs #CodeTips #Desenvolvedores #Tecnologia
#Codificação #DesenvolvimentoDeSoftware
#GiovaniDaCruz
3 comentários
-
-
Excelente.
-
Que bom que gostou, Ivanilson! 😊
-
Bastante informativo e completo. Talvez fosse interessante colocar um exemplo de como ler/converter um boolean em JSON para o equivalente em Delphi. Exemplo: tenho uma variavel IsActive: Boolean; como leio um boolean do JSON para essa variavel?