JSON no 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!







Bacana o Artigo Júlio ;)
Congrats!
Não tinha conhecimento dessa função.
Excelente post!
Obrigado Helder! Valeu pelo comentário!
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
Muito bom esse artigo .
Retirou-me algumas dúvidas :) Esta de parabéns
[... 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.
Excelente post, só complementando é interessante definir charset.
Parabens!
Boa dica Julio!
Parabéns!
abraços
Rafael
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?
E a matéria ficou ótima! Parabéns!
Obrigado !!! E parabéns pelo Post.
me ajudou bastante.