PHP é à quinta-feira – PHP + JSON
Por Pedro Peixoto para o PPLWARE
No seguimento do artigo publicado no mês passado sobre JSON e no âmbito desta rubrica, vamos hoje aprender como podemos utilizar este formato em PHP. Além disso vamos exemplificar utilizando arrays associativos já explicados numa rubrica anterior.
O JSON está já integrado no PHP 5.2.0 e disponibiliza três funções simples que passaremos a explicar de seguida.
O formato JSON foi originalmente criado por Douglas Crockford e é descrito no RFC 4627. O XML tem vindo a ser trocado pelo JSON, uma vez que o JSON é mais rápido de processar, eficiente, e simples de entender.
Vamos agora ver então algumas funções para o tratamento de informação no formato JSON usando PHP
json_encode
Esta função permite converter um array PHP numa string em formato JSON.
O output é:
Como podemos ver esta função não se portou correctamente com os caracteres com assentos, isto porque ela apenas trabalha com dados em UTF-8.
Existem várias soluções para contornar o problema da codificação, seja através da utilização directa de códigos de caracteres especiais, funções baseadas no str_replace, ou a utilização de funções já modificadas de forma a resolver este problema, entre outras. Por uma questão de simplicidade vamos optar pela primeira abordagem.
Assim, vamos reformular o nosso código:
O resultado agora é o esperado:
De seguida, vamos aumentar um pouco o grau de complexidade do nosso array, acrescentando alguns níveis.
O output é o esperado:
Conseguimos assim efectuar correctamente a conversão de um array PHP para uma string formatada em JSON, esta string pode agora ser usada para diferentes propósitos. No nosso caso vamos guardar os dados num ficheiro JSON. Para isso recorremos à função file_pute_contents. É necessário que o PHP tenha permissões de escrita no ficheiro ou pasta de destino, caso contrário irá ocorrer um erro.
Abrindo o ficheiro “dados.json” é possível conferir que a string JSON foi guardada correctamente.
json_decode
Esta função, como é de esperar, faz o inverso da anterior. Desta forma, recebendo um string em formato JSON retorna um array PHP estruturado em níveis.
Para testar esta função vamos recorrer ao código JSON gerado anteriormente e guardado no ficheiro “dados.json”. Para isso utilizamos a função file_get_contents.
O output é o seguinte:
Como podemos observar, o output não foi exactamente o esperado, isto porque para fazer a descodificação em arrays associativos temos que activar essa flag. Além disso, podemos melhorar a forma de apresentação colocando o nosso código entre a tag “pre” (<pre></pre>).
Vamos então reformular o código.
E o output é finalmente apresentado correctamente:
Poderíamos ter usado a variável $contactos para outro fim que não a simples representação.
json_last_error
Esta função não recebe parâmetros e limita-se a retornar o último erro ocorrido.
Conclusão
As funções nativas JSON_enconde e JSON_decode permitem-nos facilmente utilizar o formato JSON para armazenamento, tratamento ou conversão de dados oferecendo as vantagens já conhecidas deste formato. A partir destas podem ser desenvolvidas funções mais complexas para um tratamento mais correcto e eficaz dos dados. Apesar de simples, estes métodos são suficientes para permitirem a utilização de diversas API’s e recursos FLASH que recorrem a este formado para leitura e escrita de dados.
O que achou deste artigo? Demasiado simples? Está adequado aos seus conhecimentos? Preferia artigos mais básicos e rápidos? Não sabe por onde começar? Deixe a sua opinião para adequar os artigos futuros.
Este artigo tem mais de um ano
Já estive a ler o artigo e está bom. O que penso depois de ler isto é qual é a real utilidade do JSON e a utilidade do XML?
Nunca percebi a utilidade destes visto que existem mysql bd’s.
Se alguém me poder explicar agradeço pois ainda estou num nível muito básico no que toca a php e demais
obrigado
De uma forma muito simples, permite a interpolação de dados entre linguagens e sistemas.
1º – XML é o rei da portabilidade, embora JSON esteja ja a ser adoptado massivamente, mas não deixa de ser mais uma linguagem de marcação estruturada.
Por exemplo XML/JSON é util entre comunicação entre serviços/aplicaçoes,… podes pensar logo á cabeça a diferença de complexidade de tu criares/teres uma base de dados e um ficheiro XML simples, em que podes ler esse ficheiro em qualquer SO, o que se tivesses uma base de dados ja era muito diferente, e por aí adiante.
Outro exemplo são as feeds das paginas (RSS).
Obrigado aos 2 pela resposta, já percebi o propósito destas linguagens. Agora que falaste nos feeds isso é outra coisa que nao percebo nada e que já andei à procura porque tentei fazer os feeds das minhas noticias e mandar para o email dos utilizadores registados no meu site, o problema é que acho que tinha de escrever a noticia em Xml e não o sei fazer, apenas tenho um script php simples que fiz para inserir a noticia e para a mostrar formatada na página principal do site
Penso que não faz grande sentido pensares em feeds para enviares notícias por email… As feeds fornecem fontes de dados para que aplicações que reconheçam o formato possam ligar-se a essa fonte e obter dados a partir da mesma. Existem alguns clientes de mail que suportam feeds, mas estas não são recebidas por mail.
Relativamente à criação de uma feed, em primeiro lugar tens de escolher qual o formato no qual queres publicar as tuas noticias: rss ou atom.
Penso que o mais simples de implementar é o RSS, sendo que este tem algumas limitações relativamente ao atom (http://en.wikipedia.org/wiki/Atom_(standard)#Atom_compared_to_RSS_2.0).
Para criares uma fonte em PHP, a única coisa que tens de fazer é criar um script que defina o header (por exemplo a instrução header(“Content-Type: application/xml;”);) e que escreva o respectivo conteúdo XML.
Para escrever o conteúdo XML, podes construir uma string com o conteúdo do ficheiro de forma manual ou, se quiseres ser mais profissional, utilizar as funções do PHP DOM para construir o documento.
No final o resultado devolvido pelo script, no caso do formato RSS deverá ser algo com uma estrutura do género:
W3Schools Home Page
http://www.w3schools.com
Free web building tutorials
RSS Tutorial
http://www.w3schools.com/rss
New RSS tutorial on W3Schools
XML Tutorial
http://www.w3schools.com/xml
New XML tutorial on W3Schools
onde o title, link e description correspondem, respectivamente, o título, o endereço e a descrição da feed RSS. Cada notícia que queiras adicionar será um elemento item extra que terá de ser adicionado à saída do script.
Existem vários exemplos na net que podes estudar para fazer algo deste tipo.
Boa sorte.
boas..
isto a mim ainda me mete confusão apesar de andar ai toda a gente “doida” com xml, também eu ainda não percebi a utilidade disto…será para ficheiros de configuração??
mas nesse caso porque não usar um ficheiro de texto??
falaram na vantagem BD/xml?!como assim ?querem ter a info em ficheiros xml???e se tiverem uma base de dados gigante??o xml não aguenta a pressão logicamente e existem bases de dados que são portáveis como mysql,e Base e….
Alguém me consegue dar um exemplo em concreto por favor…
Obrigado
cmps
A utilidade dependerá, obviamente, da necessidade que tenhas específica para a resolução do teu problema.
Um exemplo concreto: uma API, como por exemplo a do Twitter, em que, para alguém poder desenvolver uma aplicação que utilize a informação do Twitter, tem que poder receber essa informação de uma forma generalizada e uniformizada, como é o caso do XML e JSON, para poder existir interoperabilidade de sistemas, linguagens de programação, etc., pois são standards comuns e fáceis de implementar seja qual for a tua escolha para desenvolver a dita aplicação.
*puder
Off topic:
Desculpem lá mas gostava de partilhar estes fantásticos vídeos que encontrei hoje sobre “Photosynth” e “augmented-reality maps”.
http://www.ted.com/talks/blaise_aguera.html
http://www.ted.com/talks/blaise_aguera_y_arcas_demos_photosynth.html
Orador:
http://www.ted.com/speakers/blaise_aguera_y_arcas.html
Muito bom este artigo, apesar de não utilizar php à muitos anos, esta linguagem continua a surpreender-me, não podia ser mais simples utilizar JSON em php…
Lol por acaso nao és professor? Tive um prof que se chamava Jose Carlos Ramalho, bom prof lol
Muito bom o artigo.
Na minha opinião, os artigos php deveriam ter um seguimento lógico evolutivo, como foi o caso deste em relação ao anterior.
ta bem explicado e estrutura o artigo. Mas o xml tem a vantagem da utilização do xsl, para formatar (como css faz ao html), nao sei se o Json tem algo semelhante. 😉
Deves querer dizer XSD (XML Schema) e não infelizmente por agora o JSON não tem Schemas, o que significa que o programador tem de explorar ao promenor todos os JSONS com que trabalha.
XSD (schema) ou tambem o DTD define a estrutura de um documento xml. o XSL (ou XSLT, como quiser) tem a mesma função que o CSS, “conversão” ou “transformação” de um documento xml para outros formatos de documentos por exemplo xhtml.
Mas para mais informações podes ver aqui:
http://www.w3schools.com/xsl/default.asp
Boas,
Estou a fazer um projecto em flash As3.0 no entanto vou fazer um backoffice e precisava de ligar o flash a um ficheiro php para conseguir fazer ligação à base de dados. Alguem sabe como se faz??
Se me pudessem ajudar agradecia.
O conceito é simples, basta fazeres um URLRequest a um ficheiro .php que se ligue à BD e retorne informação de forma a que consigas interpretar com facilidade no flash (output em XML ou JSON).
Se precisares de ajuda na questão do ficheiro PHP e código flash, basta uma pesquisa rápida no google. Por exemplo: http://www.sonsoftco.com/flash-development/AS3-Actionscript-PHP-MySQL-tutorial.html
obrigado, mal possa vou testar e depois dou feedback.
Thanks
Muito bom kara! Lí vários post’s e artigos por aí, mas a maneira como voce abordou este assunto foi bem bacana. Resultado… Consegui o que queria. Obrigado.