Trabalhando com JSON em PHP: Um Guia Completo para Parsing e Serialização
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados amplamente utilizado no desenvolvimento web. O PHP fornece funções internas poderosas para trabalhar com JSON, permitindo conversão fácil entre estruturas PHP e strings JSON. Neste artigo, examinaremos detalhadamente como realizar parsing (decodificação) e serialização (codificação) de JSON em PHP, além de analisar erros típicos e formas de tratá-los.
O que é JSON e por que ele é necessário em PHP?
JSON é um formato de texto baseado na sintaxe JavaScript. Ele é usado para transferir dados estruturados entre um servidor e um cliente (por exemplo, em APIs REST). Em PHP, o JSON é indispensável quando:
- Trocando dados com APIs externas (ex.: serviços meteorológicos, sistemas de pagamento)
- Armazenando arquivos de configuração
- Serializando dados para cache
- Trabalhando com web sockets e requisições AJAX
O PHP oferece suporte para trabalhar com JSON desde a versão 5.2.0. Todas as funções necessárias estão embutidas no núcleo — nenhuma extensão adicional é necessária.
Serialização de Dados para JSON (json_encode)
A função json_encode() converte valores PHP (arrays, objetos, strings, números) em uma string JSON. Vejamos um exemplo básico:
<?php// Array associativo$user = [ 'name' => 'Ivan Petrov', 'age' => 28, 'email' => 'ivan@example.com', 'is_active' => true, 'hobbies' => ['programming', 'chess', 'running']];
// Codificar para JSON$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>Resultado:
{ "name": "Ivan Petrov", "age": 28, "email": "ivan@example.com", "is_active": true, "hobbies": [ "programming", "chess", "running" ]}Flags importantes do json_encode
JSON_UNESCAPED_UNICODE— preserva caracteres cirílicos (sem essa flag, caracteres russos serão escapados como \\uXXXX)JSON_PRETTY_PRINT— formata a saída com indentação para legibilidadeJSON_NUMERIC_CHECK— converte strings numéricas em númerosJSON_FORCE_OBJECT— força a criação de um objeto, mesmo que um array vazio seja passado
Parsing de JSON em PHP (json_decode)
A função json_decode() realiza a transformação inversa — de uma string JSON para um valor PHP. Por padrão, ela retorna um objeto. Para obter um array associativo, passe o segundo parâmetro true:
<?php$jsonString = '{"name":"Ivan Petrov","age":28,"email":"ivan@example.com","is_active":true}';
// Decodificar para objeto$userObject = json_decode($jsonString);echo $userObject->name; // Ivan Petrov
// Decodificar para array associativo$userArray = json_decode($jsonString, true);echo $userArray['name']; // Ivan Petrov?>Profundidade de aninhamento
O terceiro parâmetro de json_decode() — depth — limita a profundidade da recursão. Por padrão, é 512. Isso protege contra ataques como o "billion laughs attack":
<?php$deepJson = '{"a":{"b":{"c":{"d":"test"}}}}';$data = json_decode($deepJson, true, 3); // Erro se profundidade for maior que 3?>Tratamento de erros ao trabalhar com JSON
Ao fazer parsing de JSON inválido, json_decode() retorna null. Para obter informações detalhadas sobre o erro, use json_last_error() e json_last_error_msg():
<?php$badJson = '{"name": "Ivan", age: 28}'; // Erro: chave age não está entre aspas
$data = json_decode($badJson, true);
if (json_last_error() !== JSON_ERROR_NONE) {