JSON no PHP

JSON com PHP

Não seria ótimo se pudéssemos importar nossos dados em JSON no PHP e tratá-los como no JavaScript? Pois é, a partir do PHP 5.2.0 já temos uma extensão para JSON incluída, e é dela que vou falar nesse post.

Com o advento do Ajax, JSON se tornou um formato para intercâmbio de dados bem mais eficiente e compacto que XML. E nada como tratá-lo como um objeto também no lado do servidor, assim como fazemos no JavaScript. As duas funções que tratam da conversão objeto-string e string-objeto no PHP são json_encode e json_decode, respectivamente.

Objeto para String

Quem já não amaldiçoou o PHP transformando manualmente um array em uma string JSON? É uma tarefa fácil, mas extremamente chata, principalmente se precisarmos usar recursão. A função json_encode faz todo o trabalho sujo pra você. Basta passar o array contendo os dados como parâmetro.

$json = array("user" => "JulioGreff", "action" => "status", "text" => "online");
echo json_encode($json);

Além de simples arrays como esse, podemos fazer algo mais complexo, com arrays dentro de arrays, em vários níveis.

$json = array("group" => "Web", "action" => "list");
$json["list"] = array("JavaScript", "Ajax", "WebStandards");
$json["users"] = array(array("name" => "JulioGreff", "status" => "online"));
echo json_encode($json);

No exemplo, além do sub-membro também coloquei um array comum, criado certinho. Adeus, foreach!

String para Objeto

Essa era uma parte complicada, transformar uma string recebida em um objeto, para podermos trabalhar. Com a função json_decode virou moleza.

$json = '{"user_id": 5, "action": "post", "text": "JSON no PHP"}';
$json = json_decode($json);
echo $json->action; // "post"
echo $json->text; // "JSON no PHP"

Veja que estamos usando um objeto, e não um array, por isso usamos o -> (equivalente ao ponto em JavaScript). Para que a função retorne um array, passamos um segundo parâmetro (booleano) indicando se o objeto deve ser transformado em um array (true) ou não.

$json = '{"user_id": 5, "action": "post", "text": "JSON no PHP"}';
$json = json_decode($json, true);
echo $json["action"]; // "post"
echo $json["text"]; // "JSON no PHP"

JSON Válido

Lembre-se sempre das aspas no JSON! Caso contrário, json_decode não irá funcionar. As aspas são necessárias em todas as strings, inclusive as chaves.

Também é necessário observar a codificação das strings para a função json_encode, pois a função só funciona com UTF-8.

Vou ficando por aqui. Até a próxima!

Posts Relacionados

Postado em fevereiro 29, 2008 às 14:22

Comentários

  1. Igor Escobar

    Bacana o Artigo Júlio ;)

    Congrats!


  2. Helder Santana

    Não tinha conhecimento dessa função.

    Excelente post!


  3. JulioGreff

    Obrigado Helder! Valeu pelo comentário!


  4. Igor Cemim

    Eu ainda te busco… tenho 14 anos…
    pode deixar… vou me matar estudando mas te busco :)

    Com 14 anos você já sabia o que?

    Abraços


  5. Euclides

    Muito bom esse artigo .
    Retirou-me algumas dúvidas :) Esta de parabéns


  6. Diego Felix

    [... Também é necessário observar a codificação das strings para a função json_encode, pois a função só funciona com UTF-8. ...]
    Atentem-se a isso, tive um sério problema com justamente pelos dados do bd virem em outro padrão.

    Abraços.


  7. Hugo Henrique

    Excelente post, só complementando é interessante definir charset.
    Parabens!


  8. Rafael Gabriel

    Boa dica Julio!

    Parabéns!

    abraços
    Rafael


  9. Digão

    O meu problema é só um: caracteres especiais no array, como resolver este problema?

    Pois como varrer no array o que não é aceito pelo UTF8 e substituir por outro caracter ou html enttites?


  10. Digão

    E a matéria ficou ótima! Parabéns!


  11. Flávio

    Obrigado !!! E parabéns pelo Post.

    me ajudou bastante.


Deixe seu comentário