PHP é à quinta-feira – PHP + JSON

19 Comentários

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.

php_json

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.

json_01

O output é:

json_02

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:

json_03

O resultado agora é o esperado:

json_04

De seguida, vamos aumentar um pouco o grau de complexidade do nosso array, acrescentando alguns níveis.

json_05

O output é o esperado:

json_06

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.

json_07

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.

json_08

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.

json_09

 

O output é o seguinte:

clip_image002

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.

clip_image002[4]

E o output é finalmente apresentado correctamente:

clip_image004

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.

Partilhar:
Tags:

Comentários

19

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Afonso
    Afonso

    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

    1. Avatar de patCRUZ
      patCRUZ

      De uma forma muito simples, permite a interpolação de dados entre linguagens e sistemas.

    2. Avatar de Bruno M.
      Bruno M.

      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).

      1. Avatar de Afonso
        Afonso

        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

        1. Avatar de Cláudio Esperança
          Cláudio Esperança

          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.

      2. Avatar de lmx
        lmx

        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

        1. Avatar de Bruno Bernardino

          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.

  2. Avatar de neon
    neon

    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

  3. Avatar de José Ramalho
    José Ramalho

    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…

    1. Avatar de Bruno M.
      Bruno M.

      Lol por acaso nao és professor? Tive um prof que se chamava Jose Carlos Ramalho, bom prof lol

  4. Avatar de Ganha dinheiro na net

    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.

  5. Avatar de jedi
    jedi

    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. 😉

    1. Avatar de Nuno Gonçalves
      Nuno Gonçalves

      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.

      1. Avatar de jedi
        jedi

        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

  6. Avatar de tiago_crkj
    tiago_crkj

    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.

    1. Avatar de Bruno Bernardino

      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

  7. Avatar de tiago_crkj
    tiago_crkj

    obrigado, mal possa vou testar e depois dou feedback.

    Thanks

  8. Avatar de Thiagod_prog
    Thiagod_prog

    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.