Como utilizar o JSON no PHP
03/12/2013 - Escrito por: Felipe Mitamura Hatanaka
O JSON é um formato de troca de dados, e sua decodificação pe feita por um parser baseado no JSON_checker de Douglas Crockford. Esta extensão na a partir da versão 5.2.0 do PHP vem empacotada e compilada por padrão. Ela estrutura a informação de forma mais compacta que o XML, por isso tem sido muito utilizada em aplicações Web.
Vou explicar quatro funções que você irá precisar: json_decode, json_encode, json_last_error_msg e json_last_error.
json_decode
Esta função decodifica uma string JSON, ou seja, recebe como entrada uma string codificada no formato JSON e a converte para uma variável PHP, e sua descrição é:
mixed json_decode ( string $json [, bool $assoc ] )
A seguir um exemplo:
$json = '{"foo-bar": 12345}'; $obj = json_decode($json); print $obj->{'foo-bar'}; // 12345
json_encode
Esta função retorna a representação JSON de um valor, é definada da seguinte forma:
string json_encode ( mixed $value )
A seguir um exemplo:
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
json_last_error_msg
Retorna uma string contento a mensagem de erro da ultima chamada de json_encode() ou json_decode() em caso de sucesso ou NULL com os parâmetros errados e é definada da seguinte forma:
string json_last_error_msg ( void )
A seguir um exemplo:
if (!function_exists('json_last_error_msg')) function json_last_error_msg() { switch (json_last_error()) { default: return; case JSON_ERROR_DEPTH: $error = 'Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: $error = 'Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: $error = 'Unexpected control character found'; break; case JSON_ERROR_SYNTAX: $error = 'Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: $error = 'Malformed UTF-8 characters, possibly incorrectly encoded'; break; } throw new Exception($error); }
json_last_error
Retorna o erro (se houver) ocorrido durante o último JSON encoding/decoding. Este erro é um inteiro, o valor pode ser uma das seguintes constantes:
Constante | Significado |
JSON_ERROR_NONE | Não ocorreu nenhum erro |
JSON_ERROR_DEPTH | A profundidade máxima da pilha foi excedida |
JSON_ERROR_STATE_MISMATCH | JSON inválido ou mal formado |
JSON_ERROR_CTRL_CHAR | Erro de caractere de controle, possivelmente codificado incorretamente |
JSON_ERROR_SYNTAX | Erro de sintaxe |
JSON_ERROR_UTF8 | caracteres UTF-8 malformado , possivelmente codificado incorretamente (PHP 5.3.3) |
A seguir um exemplo:
// A valid json string $json[] = '{"Organization": "PHP Documentation Team"}'; // An invalid json string which will cause an syntax // error, in this case we used ' instead of " for quotation $json[] = "{'Organization': 'PHP Documentation Team'}"; foreach ($json as $string) { echo 'Decoding: ' . $string; json_decode($string); switch (json_last_error()) { case JSON_ERROR_NONE: echo ' - No errors'; break; case JSON_ERROR_DEPTH: echo ' - Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: echo ' - Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: echo ' - Unexpected control character found'; break; case JSON_ERROR_SYNTAX: echo ' - Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: echo ' - Unknown error'; break; } echo PHP_EOL; } // Saída: // Decoding: {"Organization": "PHP Documentation Team"} - No errors // Decoding: {'Organization': 'PHP Documentation Team'} - Syntax error, malformed JSON
Em caso de dúvida deixe seu recado em "Comentários" ou mande um e-mail para felipe@hatanaka.com.br