



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.
[ { "usuario 1":{ "username":"aaa", "email":"[email protected]" } }, { "usuario 2":{ "username":"bbb", "email":"[email protected]" } } ] |
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: [email protected]
Chave: usuario 2
Campos:
username: bbb
email: [email protected]
Legal, e como buscar de modo fácil e rápido o e-mail do usuario 2, por exemplo?
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.
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. |
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!
Uma versão mais completa pode ser encontrado no blog Giovani Da Cruz
Fonte base: https://stackoverflow.com/questions/46534011/delphi-parse-json-array-or-array