Como procurar uma informação em um Json?
Fala galera do Show Delphi, tudo beleza?
Trabalhar com arquivos JSON é uma tarefa cada vez mais comum e necessária na atualidade e o Delphi nos oferece várias funções prontas.
Vamos considerar o seguinte Json para exemplo:
[
{
"usuario 1":{
"username":"aaa",
"email":"aaa@gmail.com"
}
},
{
"usuario 2":{
"username":"bbb",
"email":"bbb@gmail.com"
}
}
] |
[
{
"usuario 1":{
"username":"aaa",
"email":"aaa@gmail.com"
}
},
{
"usuario 2":{
"username":"bbb",
"email":"bbb@gmail.com"
}
}
]
Veja que neste exemplo temos um json array que tem em cada registro um identificador e uma lista dos seus campos e valores.
Chave: usuario 1
Campos:
username: aaa
email: aaa@gmail.com
Chave: usuario 2
Campos:
username: bbb
email: bbb@gmail.com
Legal, e como buscar de modo fácil e rápido o e-mail do usuario 2, por exemplo?
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; |
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":"aaa@gmail.com" '+
' } '+
' }, '+
' { '+
' "usuario 2":{ '+
' "username":"bbb", '+
' "email":"bbb@gmail.com" '+
' } '+
' } '+
' ] ';
{ 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. |
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":"aaa@gmail.com" '+
' } '+
' }, '+
' { '+
' "usuario 2":{ '+
' "username":"bbb", '+
' "email":"bbb@gmail.com" '+
' } '+
' } '+
' ] ';
{ 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.
Com estes códigos a nossa vida fica muito mais fácil.
Beleza pessoal? Espero que o post ajudem vocês!
Poste nos comentários as suas dúvidas e sugestões!
Um abraço e até o próximo post. Valeu!
Fonte base: https://stackoverflow.com/questions/46534011/delphi-parse-json-array-or-array
-
Giovani Da Cruz
-
620 views
- 0 comentários
- 27 de agosto de 2023
Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!
Posts Relacionados - Continue Aprendendo