Ler e escrever no formato JSON com PHP
Hoje vou demonstrar como ler e escrever no formato JSON usando o PHP, essa necessidade tem se tornado cada vez mais frequente nos dias atuais.
Isso porque temos diversas APIs espalhadas pela WEB onde o tráfego de informações ocorre sempre no formato JSON, além de requisições AJAX que também suportam esse formato e ajudam muito no momento de exibir dados com JavaScript.
Outros posts sobre PHP que podem interessar:
Importar planilhas do Excel com PHP
Aprenda como ler arquivos XML com PHP
Definição do formato JSON
“JSON (JavaScript Object Notation – Notação de Objetos JavaScript) é uma formatação leve de troca de dados. Para seres humanos, é fácil de ler e escrever. Para máquinas, é fácil de interpretar e gerar. Está baseado em um subconjunto da linguagem de programação JavaScript, Standard ECMA-262 3a Edição -Dezembro – 1999. JSON é em formato texto e completamente independente de linguagem, pois usa convenções que são familiares às linguagens C e familiares, incluindo C++, C#, Java, JavaScript, Perl, Python e muitas outras. Estas propriedades fazem com que JSON seja um formato ideal de troca de dados.” Fonte: http://www.json.org/json-pt.html
Com essa breve definição para os leitores que ainda não tinham contato com o formato JSON já fica mais fácil entender porque esse formato se tornou muito popular para troca de informações, pois no passado o formato XML sempre foi o preferido mas atualmente alguns especialistas consideram esse formato pesado se comparado ao JSON.
Felizmente o PHP trabalha muito bem com o formato JSON, possuindo funções nativas tanto para leitura quanto para escrita. Nesse post vou demonstrar 2 exemplos de como escrever arquivos no formato JSON com PHP, depois vamos ler esses mesmos arquivos usando PHP também.
Escrever no formato JSON
1 Exemplo :- Vamos escrever dados em JSON e gravar em um arquivo “cadastro.json“, esse dados contém código, nome e telefone fictícios, vamos usar a função nativa do PHP json_encode():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php // Array com dados $cliente1 = array( 'codigo' => '001', 'nome' => 'William', 'telefone' => '012 9999-6352' ); $cliente2 = array( 'codigo' => '002', 'nome' => 'Adriano', 'telefone' => '012 8888-4452' ); $cliente3 = array( 'codigo' => '003', 'nome' => 'Maria', 'telefone' => '013 3434-4444' ); // Atribui os 3 arrays para apenas um array $dados = array($cliente1, $cliente2, $cliente3); // Tranforma o array $dados em JSON $dados_json = json_encode($dados); // Cria o arquivo cadastro.json // O parâmetro "a" indica que o arquivo será aberto para escrita $fp = fopen("cadastro.json", "a"); // Escreve o conteúdo JSON no arquivo $escreve = fwrite($fp, $dados_json); // Fecha o arquivo fclose($fp); |
Nosso arquivo “cadastro.json” deve ficar com esse formato após a gravação, podemos observar que ele não fica identado, nos exemplos de leitura identei para demonstrar melhor a estrutura.
1 |
[{"codigo":"001","nome":"William","telefone":"012 9999-6352"},{"codigo":"002","nome":"Adriano","telefone":"012 8888-4452"},{"codigo":"003","nome":"Maria","telefone":"013 3434-4444"}] |
2 Exemplo :- Agora vamos montar um arquivo JSON “contatos.json” com mais detalhes, inclusive contendo objetos dentro de objetos e um identificador para os dados:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?php // Array com dados $cliente1 = array( 'codigo' => '001', 'nome' => 'William', 'telefones' => array( 'residencial' => '011 4125-6352', 'celular' => '011 9999-5241' ) ); $cliente2 = array( 'codigo' => '002', 'nome' => 'Adriano', 'telefones' => array( 'residencial' => '011 4125-635', 'celular' => '011 9999-9652' ) ); $cliente3 = array( 'codigo' => '003', 'nome' => 'Maria', 'telefones' => array( 'residencial' => '011 4444-6352', 'celular' => '011 9999-1245' ) ); // Atribui os 3 arrays apenas um array $dados = array( $cliente1, $cliente2, $cliente3 ); // Adiciona o identificador "Contatos" aos dados $dados_identificador = array('Contatos' => $dados); // Tranforma o array $dados_identificador em JSON $dados_json = json_encode($dados_identificador); // Abre ou cria o arquivo contato.json // "a" indicar que o arquivo é aberto para ser escrito $fp = fopen("contatos.json", "a"); // Escreve o conteúdo JSON no arquivo $escreve = fwrite($fp, $dados_json); // Fecha o arquivo fclose($fp); |
O formato do nosso arquivo “contatos.json” deve ser como exibido abaixo, podemos observar novamente que ele não fica identado, nos exemplos de leitura identei para demonstrar melhor a estrutura.
1 |
{"Contatos":[{"codigo":"001","nome":"William","telefones":{"residencial":"011 4125-6352","celular":"011 9999-5241"}},{"codigo":"002","nome":"Adriano","telefones":{"residencial":"011 4125-635","celular":"011 9999-9652"}},{"codigo":"003","nome":"Maria","telefones":{"residencial":"011 4444-6352","celular":"011 9999-1245"}}]} |
Ler formato JSON
1 Exemplo :- Temos um arquivo chamado “cadastro.json“, nele temos informações como código, nome, telefone do clientes no formato JSON:
1 2 3 4 5 |
[ {"codigo":"001","nome":"William","telefone":"012 9999-6352"}, {"codigo":"002","nome":"Adriano","telefone":"012 8888-4452"}, {"codigo":"003","nome":"Maria","telefone":"013 3434-4444"} ] |
Agora vamos ler esse arquivo com PHP utilizando a função json_decode():
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // Atribui o conteúdo do arquivo para variável $arquivo $arquivo = file_get_contents('cadastro.json'); // Decodifica o formato JSON e retorna um Objeto $json = json_decode($arquivo); // Loop para percorrer o Objeto foreach($json as $registro): echo 'Código: ' . $registro->codigo . ' - Nome: ' . $registro->nome . ' - Telefone: ' . $registro->telefone . '<br>'; endforeach; |
2 Exemplo :- Nesse exemplo vamos ler um arquivo “contatos.json” JSON mais complexo, contendo identificador e mais de um telefone por contato, o que torna a leitura mais “chata” porém nada assustador pois temos tudo o que precisamos no PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
{ "Contatos": [ { "codigo": "001", "nome": "William", "telefones": { "residencial" : "011 4125-6352", "celular": "011 9999-5241" } }, { "codigo": "002", "nome": "Adriano", "telefones": { "residencial" : "011 4125-6352", "celular": "011 9999-9652" } }, { "codigo": "003", "nome": "Maria", "telefones": { "residencial" : "011 4444-6352", "celular": "011 9999-1245" } } ] } |
Usando a mesma função json_decode() vamos percorrer o objeto de retorno mas agora vamos acessar o identificador “Contatos” e para cada objeto contato temos 1 objeto “telefones” contendo números de telefone:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php // Atribui o conteúdo do arquivo para variável $arquivo $arquivo = file_get_contents('contatos.json'); // Decodifica o formato JSON e retorna um Objeto $json = json_decode($arquivo); // Loop para percorrer o Objeto foreach($json->Contatos as $registro): echo 'Código: ' . $registro->codigo . ' - Nome: ' . $registro->nome . '<br>'; echo 'Telefone Residência: ' . $registro->telefones->residencial . ' - Telefone Celular: ' . $registro->telefones->celular . '<br>'; endforeach; |
Com isso pessoal chego ao fim desse post, o formato JSON se mostra muito leve e como já foi dito é independente de linguagem o que facilita sua interoperabilidade principalmente para WebServices.
Código Fonte dos Exemplos (2061 downloads)
Espero que tenham gostado e até a próxima …