|
Usuários |
|
80 Usuários Online
|
|
[Artigos]
Trabalhando com JSON no Delphi |
Publicado por rboaro : Segunda, Maio 07, 2012 - 03:05 GMT-3 (1055 leituras)
2 Comentários Enviar para um amigo Versão para impressão
|
JSON, ou JavaScript Object Notation, é um padrão baseado em texto para integração de dados, caracterizado por um conjunto de chaves e valores. É comumente utilizado para o tráfego de informações entre ambientes heterogêneos via HTTP, como nas aplicações EDI (Electronic Data Interchange). Suas principais características são: um arquivo JSON é muito menor do que um arquivo XML, por exemplo; sua sintaxe é muito simples e, consequentemente, muito mais fácil de se implementar nas mais diversas linguagens. Como o próprio nome já diz, esta notação foi desenvolvida em Javascript, isto quer dizer que podemos utilizar este padrão normalmente nesta linguagem, enquanto em outras necessitamos de uma biblioteca específica. Quem está acostumado a trabalhar com Javascript não sentirá dificuldade para implementar JSON em sua aplicação! Existem apenas duas estruturas que compõem o JSON:

Estes são os tipos que podemos criar e utilizar na notação JSON:

3 - Valores
A seguir podemos ver um ótimo exemplo de todas as estruturas e tipos de dados presentes no JSON:

Primeiro, temos algumas informações básicas como nome e idade, do tipo string e integer respectivamente. Depois, temos o endereço que é um conjunto de valores, ou seja, é um objeto com três informações. Por fim, podemos ver um array com dois números de telefone. Simples, rápido e objetivo não é? Pois então, vamos ver como podemos utilizá-lo no Delphi...
JSON no Delphi
A partir do Delphi 2010, o JSON é suportado nativamente pela VCL e encontra-se na unit DBXJSON. Para uma melhor ilustração da utilização do JSON, vamos criar um pequeno exemplo onde mostraremos as principais funcionalidades desta notação. Criaremos um projeto VCL Forms devido ao nosso objetivo neste artigo, que é mostrar como utilizar a notação JSON, porém na “vida real”, sua utilização mais adequada seria numa aplicação para integração de dados do tipo Client/Server, DataSnap Rest etc. Bom, vamos então criar um novo projeto no Delphi clicando em File -> New -> VCL Forms Application – Delphi. Adicionemos um componente TMemo e dois TButtons, como pode ser visto abaixo:

Primeiramente, vamos adicionar a unit DBXJSON na uses list para que possamos ter acesso à biblioteca do JSON no Delphi. No primeiro botão, iremos reproduzir o exemplo JSON que foi mostrado acima para que possamos compreender melhor o processo de desenvolvimento e utilização dos métodos e tipos existentes na biblioteca em questão. Sendo assim, no evento onClick deste botão vamos adicionar o seguinte código:
var
nome, logradouro, cidade, estado, tel1, tel2: TJSONString;
idade: TJSONNumber;
objJson, objEndereco: TJSONObject;
arrTelefone: TJSONArray;
begin
//Criando o objeto JSON principal
objJson := TJSONObject.Create;
///Criando valores básicos
nome := TJSONString.Create('Rodrigo');
idade := TJSONNumber.Create(23);
logradouro := TJSONString.Create('Rua Teste, 999');
cidade := TJSONString.Create('São Paulo');
estado := TJSONString.Create('SP');
tel1 := TJSONString.Create('11 1234-9876');
tel2 := TJSONString.Create('11 4321-6789');
///Criando objeto que armazenará o endereço
objEndereco := TJSONObject.Create;
///Criando o array que armazenará os telefones
arrTelefone := TJSONArray.Create;
///Adicionando as informações de endereço em seu respectivo objeto
objEndereco.AddPair(TJSONPair.Create('logradouro', logradouro));
objEndereco.AddPair(TJSONPair.Create('cidade', cidade));
objEndereco.AddPair(TJSONPair.Create('estado', estado));
///Adicionando os telefones no respectivo array
arrTelefone.AddElement(tel1);
arrTelefone.AddElement(tel2);
///Criando pares de valores com os valores básicos, objeto e array
objJson.AddPair(TJSONPair.Create('nome', nome));
objJson.AddPair(TJSONPair.Create('idade', idade));
objJson.AddPair(TJSONPair.Create('endereco', objEndereco));
objJson.AddPair(TJSONPair.Create('telefone', arrTelefone));
Memo1.Clear;
///Adicionando a string do objeto JSON principal no Memo
memo1.Lines.Add(objJson.ToString);
Agora iremos analisar melhor o que foi feito neste evento. Começamos criando um objeto principal que armazenará todos os pares chave-valor criados posteriormente. Logo depois, criamos todos os valores com seus tipos adequados. Note que criamos um objeto endereço, pois ele é composto por três pares. Também criamos um array para armazenar os telefones e, no final, adicionamos todos os valores criados aos seus devidos pares e daí ao objeto JSON principal, mostrando-o então no Memo. Após executar a aplicação e clicar no primeiro botão, teremos o seguinte resultado:

No segundo botão, adicione o seguinte código:
var
objJSON: TJSONObject;
pairJSON: TJSONPair;
i: integer;
begin
objJSON := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes('{"nome":"Rodrigo", "idade":23}'), 0) as TJSONObject;
Memo1.Clear;
Memo1.Lines.Add('Converte String para JSON');
Memo1.Lines.Add(objJson.ToString);
pairJSON := TJSONPair.Create;
Memo1.Lines.Add('Mostra o par completo');
for i := 0 to objJSON.Size - 1 do
begin
pairJSON := objJSON.Get(i);
Memo1.Lines.Add(pairJSON.ToString);
end;
Memo1.Lines.Add('Mostra o par separadamente');
for i := 0 to objJSON.Size - 1 do
begin
pairJSON := objJSON.Get(i);
Memo1.Lines.Add(pairJSON.JsonString.ToString + ' : ' + pairJSON.JsonValue.ToString);
end;
Neste evento, começamos com uma conversão de uma string, conforme a notação JSON, para um objeto JSON. Depois, varremos o objeto JSON e, para cada iteração do loop, lemos um par chave-valor e o mostramos por completo. Enquanto que no segundo loop, capturamos primeiramente a chave e depois o valor de forma separada. O resultado após execução do evento é o seguinte:

Bom, caros Delphianos, como podemos ver a notação JSON é muito mais fácil, leve e legível em comparação ao XML, por isso sua utilização vem crescendo cada vez mais, principalmente no mundo das integrações de dados e/ou qualquer forma de comunicação entre ambientes dos mais diversos.
Nota: Esta aplicação-exemplo foi desenvolvida com Delphi XE, porém a partir do Delphi 2010 temos acesso a estas funcionalidades nativamente, graças à biblioteca DBXJSON.
Espero que tenha sido útil!
Forte Abraço!
Rodrigo Santos
rod.alves88@gmail.com
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|