7
20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 1/7 19 DE JULHO DE 2013 Lendo dados JSON em aplicações Delphi O JavaScript Object Notation ‐ ou simplesmente JSON ‐ é um formato padrão para troca de informações muito usado na construção de sites devido à sua estrutura baseada no JavaScript. Essa característica dá aos scripts em uma página HTML a flexibilidade para recuperar informações complexas e aplicá‐las ao HTML conforme a necessidade, incrementando a usabilidade da página. Assim como o XML, JSON é um formato texto aberto, isto é, que pode ser extendido para acrescentar novos valores quando for preciso; ambos também são fáceis de serem lidos por humanos. As informações nesse formato são construídas com pares nome/valor, sendo suportados 3 tipos básicos de dados: texto (string), números e booleanos. Os pares de valores, no entanto, podem ser rearranjados para construir objetos complexos e listas de objetos (arrays). O quadro a seguir mostra o exemplo de um objeto JSON complexo: /* Objeto JSON complexo, incluindo um array com 3 outros objetos */ { Assinar feed RSS Luís Gustavo Fabbro Bacharel em Ciências da Computação, formado pela Unesp Bauru. Foi responsável pelos módulos da área industrial do ERP da ABC71 Soluções em Informática entre 1993 e 1998. Em 2002, passou a ser responsável pela então nascente área de Pesquisa & Desenvolvimento da empresa. É profissional certificado pela Microsoft, com especialização em arquitetura do Sistema Operacional Windows. QUEM SOU EU Pesquisar PESQUISAR NO BLOG

Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

Embed Size (px)

DESCRIPTION

REST – Desmistificando A Implementação De Web Services REST

Citation preview

Page 1: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 1/7

19 DE JULHO DE 2013

Lendo dados JSON em aplicações Delphi

O JavaScript Object Notation ‐ ou simplesmente JSON ‐ é um formato padrão paratroca de informações muito usado na construção de sites devido à sua estruturabaseada no JavaScript. Essa característica dá aos scripts em uma página HTML aflexibilidade para recuperar informações complexas e aplicá‐las ao HTML conforme anecessidade, incrementando a usabilidade da página.

Assim como o XML, JSON é um formato texto aberto, isto é, que pode ser extendidopara acrescentar novos valores quando for preciso; ambos também são fáceis deserem lidos por humanos. As informações nesse formato são construídas com paresnome/valor, sendo suportados 3 tipos básicos de dados: texto (string), números ebooleanos. Os pares de valores, no entanto, podem ser rearranjados para construirobjetos complexos e listas de objetos (arrays). O quadro a seguir mostra o exemplo deum objeto JSON complexo:

/* Objeto JSON complexo, incluindo um array com 3 outros objetos */

Assinar feed RSS

LuísGustavoFabbro

Bacharel em Ciências daComputação, formado pelaUnesp Bauru. Foi responsávelpelos módulos da áreaindustrial do ERP da ABC71Soluções em Informática entre1993 e 1998. Em 2002, passoua ser responsável pela entãonascente área de Pesquisa &Desenvolvimento da empresa.É profissional certificado pelaMicrosoft, com especializaçãoem arquitetura do SistemaOperacional Windows.

QUEM SOU EU

Pesquisar

PESQUISAR NO BLOG

Page 2: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 2/7

"empresa":"ABC71", "ativa": true,"fundacao": 1971,"empregados": [

"nome": "Jose", "sobrenome": "Silva" ,"nome": "Beto", "sobrenome": "Marinho" ,"nome": "Jim" , "sobrenome": "Jones"

];

Há diversos serviços disponíveis na internet ‐ alguns gratuitos ‐ com os quais podemosrecuperar diferentes tipos de informação (lista de países, previsão do tempo, cotaçõesde moedas, etc). Além disso, é possível construirmos nossos próprios serviços paraprover qualquer tipo de dado que necessitemos. Neste post, eu mostro comoaplicações Delphi podem se beneficiar de serviços como esses, usando como exemploum dos serviços publicados no site GitHub.

O retorno do serviço proposto é uma série de objetos descrevendo cada pais domundo, incluindo seu nome, um id numérico e a sigla de 3 letras usada para o país. Oquadro abaixo traz como exemplo o objeto para o Brasil:

"title":"Brazil","population":174468575,"currency_code": "BRL","currency": "Brazilian Real ","nationality_plural": "Brazilians","nationality_singular": "Brazilian","map_reference": "South America ","_id": 33,"country": "Brazil","fips104": "BR","iso2": "BR","iso3": "BRA","ison": 76,"internet": "BR","capital": "Brasilia "

Como se trata de um serviço oferecido na internet, o primeiro passo é acessar o

Participar deste siteGoogle Friend Connect

Membros (180) Mais »

Já é um membro? Fazer login

SEGUIDORES

.NET ( 15 )

ADO ( 3 )

Artigos ( 7 )

C# ( 11 )

C++ Builder ( 39 )

CAPICOM ( 6 )

Componentes ( 7 )

Conceitos ( 36 )

Delphi ( 128 )

Design Patterns ( 41 )

Excel ( 10 )

Ferramentas ( 20 )

HTML ( 23 )

Indy ( 8 )

Internet ( 16 )

MARCADORES

Page 3: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 3/7

endereço do serviço para obter o conteúdo disponível. Isso pode ser conseguido com ocomponente TIdHTTP do Indy, conforme descrito no post Trabalhando com HTTP emDelphi. Para nosso cenário, isso se resume ao código do quadro abaixo:

var JsonStream: TStringStream;beginJsonStream:= TStringStream.Create('');

try JsonStream conterá os dados JSON requisitados :idHttp1.Get('https://raw.github.com/nosql/data

refine/master/data/json/countries.json', JsonStream);TrataJsonStream(JsonStream);

finallyJsonStream.Free();

end;

Após a chamada da função Get, a variável JsonStream contém a estrutura JSONcompleta com os dados dos paises. Essas informações estão em formato texto mas oDelphi possui um mecanismo de parse para carregá‐los num objeto próprio, oTJSONObject:

var jso : TJSONObject;jsop: TJSONPair;

beginjso := TJsonObject.Create;jso.Parse (JsonStream.Bytes, 0);

for jsop in jso do beginif jsop.JsonString.Value = '_id' thenpais.id := ((jsop.JsonValue) As TJSONNumber).AsInt

elseif jsop.JsonString.Value = 'iso3' thenpais.ISO3 := jsop.JsonValue.Value

elseif jsop.JsonString.Value = 'country' thenpais.Pais := jsop.JsonValue.Value;

end;jso.Free;

end;

Notícias ( 48 )

Registry ( 5 )

Script ( 22 )

SQL ( 10 )

Threads ( 7 )

Windows ( 32 )

XML ( 13 )

Problemas comuns ao consumir Web Servicespara NFe em C#Ok, já venceu ou está prestes a vencer o prazopara que uma grande parte das empresasutilizem obrigatoriamente a NFe ‐ Nota FiscalEletrôn...

Lendo dados JSON em aplicações DelphiO JavaScript Object Notation ‐ ousimplesmente JSON ‐ é um formato padrãopara troca de informações muito usado naconstrução de sites dev...

Trabalhando com Threads em Delphi ‐exemplo básicoNeste post, vou dar sequência ao postanterior sobre Threads e mostrar um exemplobastante básico de como criar uma aplicaçãousando Thread...

Traçando rotas com a versão 3 da API doGoogle MapsUsar a versão 3 da API do Google Maps paratraçar a rota entre dois endereços envolvebasicamente os mesmos procedimentosdescritos no post...

Trabalhando com HTTP em Delphi

POSTAGENS POPULARES

Page 4: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 4/7

Um TJSONObject armazena a lista dos pares nome/valor que constituem um objetoJSON. Como vemos no quadro anterior, a lista é um iterator para valores do tipoTJSONPair, com o qual podemos extrair tanto o nome (JasonString) quanto o valor(JasonValue) de cada propriedade do objeto JSON.

No entanto, há um problema com o código acima. Mencionei antes que o serviçoretorna uma série de objetos mas o código mostrado trata apenas o primeiro objetorecuperado no stream. Para tratar os demais, temos que conhecer melhor a funçãoParse do objeto JSON.

O primeiro parâmetro da função Parse é o stream obtido junto ao serviço na web. Osegundo parâmetro indica a partir de qual caractere do stream o Parse deve começarseu trabalho. A função retorna a posição do stream onde a leitura do objeto correntefoi concluída. Isso tudo é necessário porque não sabemos de antemão o tamanho decada objeto. Mas, com essas informações que temos, podemos montar um laço capazde ler todos os objetos incluídos no stream, como faz o código a seguir:

var i : Int64;jso : TJSONObject;jsop: TJSONPair;

begini := 0;repeatjso := TJsonObject.Create;i := abs (jso.Parse (JsonStream.Bytes, i));

for jsop in jso do begin Trata aqui cada JSON Pair

end;jso.Free;

until (i >= JsonStream.Size);end;

O objeto JSON usado no exemplo é relativamente simples, não possuindo outrosobjetos aninhados ou mesmo um array de valores. Para esses casos, o laço que trata ospares de valores deve testar o tipo do valor e tratá‐lo apropriadamente, reconstituindo

O protocolo HTTP ‐ HyperText TransferProtocol ou Protocolo de Transferência deHipertexto) ‐ é certamente o mais utilizado nainternet. É ...

Fazendo Download e Upload usando FTP comDelphiO FTP é um protocolo bastante antigo,anterior ao advento da internet maslargamente usado nela para transferência dearquivos ‐ os popular...

Formatando planilhas Excel através deprogramaçãoJá descrevi em posts anteriores comoautomatizar a leitura e a criação de planilhasExcel, bem como fiz um overview dosprincipais objetos...

Trabalhando com as funções de agregação doSQLO SQL ‐ Structured Query Language(Linguagem de Consulta Estruturada) é umalinguagem usada para dar manutenção nosdados em um bancos de ...

Convertendo objetos Delphi para o formatoJSONDamos o nome de serialização ao processo depegar um objeto em memória numalinguagem de programação e convertê‐lo paraum formato padrão, ...

Enviando emails com Delphi ‐ Parte IO email é há bastante tempo uma ferramentacorriqueira, das mais usadas nesses temposde internet. Mas, a utilidade dele não estárestrita à...

ARQUIVO DO BLOG

Page 5: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 5/7

Postado por Luís Gustavo Fabbro às 14:36 Marcadores: Delphi , Indy , Internet

o objeto complexo. Isso pode ser conseguido usando o ClassName do valor ou RTTI,como abaixo:

if jsop.JsonValue Is TJSONObject thenTrataObjeto (jsop.JsonValue As TJSONObject)

elseif> jsop.JsonValue Is TJSONArray thenTrataArray (jsop.JsonValue As TJSONArray)

else begin Trata valores simples

end;

A forma como transportei o conteúdo de um objeto JSON para uma estruturaequivalente do Delphi aqui neste post é o método mais simples. O Delphi disponibilizamecanismos de serialização de informações usando JSON que são bem maiselaborados e flexíveis. Mostro tais mecanismos em outro ocasião.

Mais InformaçõesJavaScript Object Notation, Trabalhando com HTTP em Delphi, JSON Tutorial, JSONcom informações de países no GitHub

+3 Recomende isto no Google

Um comentário :

Carlos Daniel 7 de agosto de 2013 16:49

Interessante artigo e quem trabalha com versões mais antigas do Delphi, como oDelphi 2007 por exemplo, recomendo usar a unit uJSON de Fabio Almeida, aqui estouusando muito bem.

Responder

2014 ( 2 )

2013 ( 7 ) Novembro ( 1 )

Setembro ( 1 )

Julho ( 1 )Lendo dados JSON em aplicações Delphi

Maio ( 1 )

Abril ( 1 )

Março ( 1 )

Janeiro ( 1 )

2012 ( 21 )

2011 ( 43 )

2010 ( 66 )

2009 ( 120 )

Page 6: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 6/7

Postagem mais recente Postagem mais antigaPágina inicial

Assinar: Postar comentários ( Atom )

Digite seu comentário...

Comentar como: Conta do Google

Publicar Visualizar

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serãopublicados somente após aprovação.

Lazybones In…R$ 28 R$ 26,60

Inglês Instr…R$ 45 R$ 42,75

Encontrada …R$ 27,90 R$ 26,60

Sem Esperanç…R$ 28 R$ 26,60

Homens Mul…R$ 28 R$ 26,60

Bomdia, Tod…R$ 40 R$ 26,60

Milagres Inv…R$ 28 R$ 26,60

O Verdadeiro…R$ 30 R$ 26,60

Apaixonados…R$ 28 R$ 26,60

A Evolução D…R$ 28 R$ 26,60

Page 7: Balaio Tecnológico_ Lendo Dados JSON Em Aplicações Delphi

20/01/2015 Balaio Tecnológico: Lendo dados JSON em aplicações Delphi

http://balaiotecnologico.blogspot.com.br/2013/07/lendodadosjsonemaplicacoesdelphi.html 7/7

TOTAL DE VISITAS

5 5 4 8 8 2

Tecnologia do Blogger.