logotipo Blog Giovani Da Cruz
Delphi

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

5 min de leitura · publicado em 13/12/2024 662 visualizações
Como Procurar uma Informação em um JSON no Delphi?
Localizando informações dentro de um JSON em 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

  1. 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?

Deixe um comentário

Seu e-mail não será publicado.