os dados do JSON decodificado$dadosJson = json_decode( $json, true );// Saida: Nome: Legolas Kun Email: legolas@teste.comecho sprintf( 'Nome: %s Email: %s',$dadosJson['nome'], $dadosJson['email'] );?>Neste exemplo decodifico um JSON em um Array, como cada atributo do JSON vira um indice do Array de retorno podemos acessar os valores de cada atributo do JSON pelo indice do Array como e demonstrado na linha #22 do codigo acima.No exemplo abaixo irei utilizar o retorno default da funcao de decodificacao do JSON. Para acessar os dados que foram criados devemos usar o conceito da POO (Programacao Orientada a Objetos). Sei que nao mencionei sobre POO em meu blog, mas irei informar sucintamente no exemplo como acessar os dados do retorno da decodificacao utilizando as notacoes da OO.Irei utilizar o mesmo exemplo acima porem retirando o segundo parametro da funcao:<?php// JSON a ser decodificado$json = '{ "nome": "Legolas Kun", "email": "legolas@teste.com", "cursos": [ { "nome": "Analise de Sistemas", "periodos": 5 }, { "nome": "Engenharia", "periodos": 10 } ]}';// Criando o Object com os dados do JSON decodificado$obj = json_decode( $json );// Saida: Nome: Legolas Kun Email: legolas@teste.com Quantidade de Cursos: 2echo sprintf( 'Nome: %s Email: %s Quantidade de Cursos: %d',$obj->nome, $obj->email, count( $obj->cursos ) );?>Em PHP na POO para acessarmos os atributos publicos (de livre acesso) de um Object devemos informar o objeto da Classe e utilizar os caracteres -> para informar qual atributo publico que queremos acessar. Veja na linha #22 que utilizamos a notacao "$obj->nome". Estou informando que no Obejct de retorno eu irei acessar o valor do atributo "nome" da Classe. Assim exibindo o valor do atributo. Veja que eu informei o atributo dos cursos do objeto "$obj->cursos" dentro da funcao do PHP "count()". Esse atributo contem um Array com dois Objects PHP assim retornando o valor para a mensagem.Por ultimo porem nao menos importante a funcao para resgatar o ultimo erro ocorrido na Codificacao/Decodificacao do JSON. Infelizmente essa funcao so esta habilitada na versao 5.3 ou superior do PHP.Sintaxe da funcao json_last_error():json_last_error()Esta funcao nao possui parametros e ira retornar o valor entre 0 e 5 que informa o tipo de erro que foi retornado, podemos utilizar as constantes do PHP para verificar o erro ocorrido na Codificacao/Decodificacao do JSON. Abaixo segue a tabela com as constantes: Constantes PHP Constante Valor JSON_ERROR_NONE 0 JSON_ERROR_DEPTH 1 JSON_ERROR_STATE_MISMATCH 2 JSON_ERROR_CTRL_CHAR 3 JSON_ERROR_SYNTAX 4 JSON_ERROR_UTF8 5 Exemplo 7: Verificando alguns Erros da Decodificacao<?php// String valida do JSON$json[] = '{"Nome": "Legolas Kun"}';// Invalida String JSON, pois os valores devem estar entre ""$json[] = "{'Nome': 'Legolas Kun'}";// Invalida String JSON, pois nao e um JSON valido$json[] = '{"Son Gohan"}';// LOOP para verificar os erros da Decodificacaoforeach ($json as $string) { echo 'Decodificado: ' . $string; json_decode($string); switch (json_last_error()) { case JSON_ERROR_NONE: echo ' - Sem Erros'; break; case JSON_ERROR_DEPTH: echo ' - Numero de indice maximo excedido'; break; case JSON_ERROR_CTRL_CHAR: echo ' - Caractere de controle inesperado encontrado'; break; case JSON_ERROR_SYNTAX: echo ' - Erro na sintaxe do JSON'; break; case JSON_ERROR_UTF8: echo ' - UTF-8 caracteres malformados, possivelmente incorretamente codificado'; break; default: echo ' - Erro desconhecido'; break; }