Anda di halaman 1dari 4

24/4/2014

Muito Prazer eu me chamo JSON parte II | Marco Salles

Marco Salles
Delphi & Programao & Lgica

Muito Prazer eu me chamo JSON parte II


Publicado em maio 4, 2011

O Pessoal da humanas que esta curioso para conhecer este tal de Json , confesso que no iro manter contato
e mesmo se decpcionar . Para o pessoal das exatas digo que Json no um cara , Json o cara . Do acrnimo
de Java Script Object Notation caracterisa-se pelo formato simples para a troca de dados entre aplicaes
heterogneas . Ganhou notoriedade devido ao seu emprego em AJAX , mas ganhou adeptos alm das
fronteiras do Java Scripts e foi adotado por grandes empresas e possui implementao em diversas linguagens
de programao . A troca de informaes entres sistemas at a alguns anos atrs utilizava-se os arquivos txt ,
posicionais ou separados por delimitadores evoluindo ao Xml e onde o Json apresenta como uma forma mais
simples de alcanar bons resultados Na segunda parte deste despretensioso artigo faremos a converso de um
Objeto do Delphi em Notao Json , e um Objeto Json transformado em um Objeto do Delphi , ou seja o
processo inverso, respectivamente estamos falando de Marshal e UnMarshal. Vamos definir a classe que
definira o Objeto a ser transformado
1
2
3
4
5
6
7
8
9
10
11

1
2
3
4
5

Type
TPessoa = class
strict private
FNome:String;
FIdade:integer;
FEstadoCivil:Boolean;
public
property Nome:String read FNome write FNome;
property Idade:integer read FIdade write FIdade;
property EstadoCivil:Boolean read FEstadoCivil write FEstadoCivil;
end;

uses
DBXJSon , DBXJsonReflect;
var

objValueJson:TJSONValue;

vamos colocar Dois edits ( edtNome , edtIdade ) um RadioGrupoBox (rdgEstadoCivil ) dois Buttons
(btnObjectToJson , btnJsonToObject) e um Memo (MemResult) no formulrio Agora no evento onclick do
btnObjctToJson vamos escrever o cdigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

procedure TForm1.btnObjectToJsonClick(Sender: TObject);


var
M:TJSONMarshal;
pessoa:TPessoa;
begin
pessoa:=TPessoa.Create;
try
pessoa.Nome:=edtnome.Text;
pessoa.Idade:=StrToIntDef(edtIdade.Text,0);
case rdgEstadoCivil.ItemIndex of
0:pessoa.EstadoCivil:=true;
1:pessoa.EstadoCivil:=false
end;
M:=TJSONMarshal.Create(TJSONConverter.Create);
try
FobjValueJson.Free;
FobjValueJson:=M.Marshal(pessoa);

http://marcosalles.wordpress.com/2011/05/04/232/

1/4

24/4/2014

18
19
20
21
22
23
24
25

Muito Prazer eu me chamo JSON parte II | Marco Salles

MemResult.Lines.text:=FobjValueJson.ToString;
finally
M.Free;
end;
finally
pessoa.Free;
end;
end;

O Cdigo acima , instncia um objeto TPessoa e o converte em objeto do Tipo Json. Ainda exibe a notao do
Objeto Json em formato texto no Memresult . Nosso prximo objetivo fazer a operao inversa , isto
de posse do objeto FobjValueJson , iremos converte-lo no objeto do tipo Tpessoa . Para isto vamos
programar o evento onclick do button btnJsonToobject com o seguinte cdigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

procedure TForm1.btnJsonToObjectClick(Sender: TObject);


var
unM:TJSONUnMarshal;
pessoa:TPessoa;
begin
if not Assigned(FobjValueJson) then
exit();
unM:=TJSONUnMarshal.Create;
pessoa:=TPessoa(unM.Unmarshal(<strong>FObjValueJSon</strong>));
Edit7.Text:=pessoa.Nome;
Edit8.Text:=inttostr(pessoa.Idade);
case integer(pessoa.EstadoCivil) of
0:rdgEstadoCivil.ItemIndex:=0;
1:rdgEstadoCivil.ItemIndex:=1;
end;
MemResult.Text:=FobjValueJson.ToString;
unM.Free;
pessoa.Free;
end;

Aqui cabe ressaltar que o mtodo unM.Unmarshal(FObjValueJSon) internamente retorna uma


instncia do objeto TPessoa . No precisando portando instanciar o objeto antes de chamar o mtodo . O
cdigo tb bem simples e dispensa comentrios No evento onclose do formulrio (aqui esta representando
como formulrio ) mas poderia ser uma classe devem os destruir as referncias do objeto Json TObjVakueJson
.
1
2
3
4
5

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);


begin
//if assigned(FobjValueJson) then
FobjValueJson.Free;
end;

perceba que comentamos a linha if assigned(FobjValueJson) then . Pois internamente a classe testa se
FobjValueJson uma instancia vlida , evitando erros de AV ( Acessos Violados ) caso FobjValueJson for nil
por exemplo
O pessoal das exatas deve estar perguntando ( o das humanas ja deve ter fechado este post h muito tempo )
para que tudo isto ??? Agora possvel passar uma instncia de um objeto transformado em TJSONValue por
exemplo ( de um processo de cliente ) para um servidor como parmetro de entrada ou sada e receber de volta
Seguir
um TJSONValue como um parmetro de sada e o recuperamos
para o Objecto correspondente.

Seguir Marco Salles

No Json temos padres abertos de comunicao entre vrios servios da web , em outras palavras temos
Obtenha todo post novo

interoperabilidade , isto , precisamos


construir
entregue na sua
caixa de aplicativos , servios , que utilizam padres abertos de
entrada.
comunicao . viabilizando que diferentes
plantaformas e linguagens se comuniquem e consumam o servio

oferecido . O Json por ser mais simples


Junte-se a do
52 outros
que seguidores
o xml mais fcil de Serealizar/Deserializar , e tambm
por se menor , o pacote de dados Insira
trafegado
ser consecutivamente
menor o que torna o processo mais rpido .
seu endereo
de e-mail
http://marcosalles.wordpress.com/2011/05/04/232/

2/4

24/4/2014

Muito Prazer eu me chamo JSON parte II | Marco Salles

De qualquer forma cada caso um caso e merece uma anlise especfica a fim de comparamos o custo x
Cadastre-me

benefcio entre os dois processos . Mais detalhes entre esses dois comparativos pode ser obtido em
http://www.json.org/xml.html

Tecnologia WordPress.com

Para finalizar tentamos mostrar neste artigo os mtodos Marshal e UnMarshal que facilita muito o trfego
de objetos via notao Json . Qualquer dvida crtica ou sugesto estarei a disposio para eventuais contato
no mais meu muito obrigado
Veja a parte I desse artigo : Muito Prazer eu me chamo JSON parte I no lonk

http://marcosalles.wordpress.com/2011/05/03/muito-prazer-eu-me-chamo-json/
Atualizao ***** 15/07/2011
Neste mesmo blog tem um um artigo onde se aplica na prtica com DataSnap a Serializao/DesSerializao
de Objetos a fim que possam serem trafegados na Web e Comitados na Aplicao Servidora. Segue o Link
http://marcosalles.wordpress.com/2011/07/14/json-applyupdate-aplicacao-de-atualizacoes-para-mais-deum-clientdataset-em-uma-unica-transacao-com-datasnap-parte-ii/
About these ads

You May Like


1.

Compart ilhe isso :

Facebook

Twitter

LinkedIn

Email

Imprimir

Gosto
Be the first to like this.

Relacionado

Muito Prazer eu me chamo JSON - parte I


Em "Dicas"

Transformar Delta OleVariant TDataPacker


Para String TClientDataSet Delphi
Em "Artigos"

JSON ApplyUpdate Aplicao de


atualizaes para mais de um ClientDataSet
em uma nica transao com DataSnap parte
IIB
Em "Artigos"

Sobre marcosalles
Delphiano de Corao Desenvolvo FreeLancer e presto Consultoria Orientao Online DataSnap DbX ClientDataSet , POO ,
Padres de Projeto e dvidas de Delphi em Geral
Ver todas as mensagens por marcosalles

Esse post foi publicado em Artigos. Bookmark o link permanente.

http://marcosalles.wordpress.com/2011/05/04/232/

3/4

24/4/2014

Muito Prazer eu me chamo JSON parte II | Marco Salles

Marco Salles
O tema Twenty Ten.

http://marcosalles.wordpress.com/2011/05/04/232/

Blog no WordPress.com.

4/4

Anda mungkin juga menyukai