Processamento JSON em PHP: Guia Completo
JSON (JavaScript Object Notation) é um formato leve de troca de dados que se tornou o padrão de facto para a comunicação entre cliente e servidor, bem como entre vários serviços web. Em PHP, o trabalho com JSON é implementado nativamente e não requer a instalação de extensões adicionais, tornando-o uma das linguagens mais convenientes para parsing e geração de dados JSON. Neste artigo, abordaremos detalhadamente todos os aspectos do processamento JSON em PHP: desde funções básicas até técnicas avançadas e tratamento de erros.
Funções principais do PHP para trabalhar com JSON
O PHP fornece duas funções-chave para trabalhar com JSON:
json_encode($value, $options = 0, $depth = 512)— converte um valor PHP (array, objeto, string, número) em uma string JSON.json_decode($json, $associative = false, $depth = 512, $options = 0)— decodifica uma string JSON de volta para um valor PHP. Se o parâmetro$associativefor definido comotrue, retorna um array associativo; caso contrário, retorna um objeto stdClass.
Vejamos um exemplo simples:
<?php// Criando um array associativo$data = [ "name" => "Ivan", "age" => 30, "city" => "Moscou", "skills" => ["PHP", "JavaScript", "Python"]];
// Codificando para JSON$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $json;// Saída:// {// "name": "Ivan",// "age": 30,// "city": "Moscou",// "skills": ["PHP", "JavaScript", "Python"]// }
// Decodificando de volta para array$decoded = json_decode($json, true);echo $decoded['name']; // Ivan?>Opções importantes do json_encode
A função json_encode suporta várias flags que alteram o comportamento da codificação. As mais úteis são:
JSON_UNESCAPED_UNICODE— não escapa caracteres Unicode (cirílico, emojis). Sem esta flag, letras russas serão convertidas para \\uXXXX.JSON_PRETTY_PRINT— formata a saída com indentação e quebras de linha para legibilidade.JSON_NUMERIC_CHECK— converte strings numéricas em números.JSON_FORCE_OBJECT— força a criação de um objeto em vez de um array, mesmo que o array esteja vazio ou seja indexado.JSON_PRESERVE_ZERO_FRACTION— preserva a parte fracionária para números inteiros (por exemplo, 10.0).
Exemplo de combinação de opções:
<?php$data = ['product' => 'Livro', 'price' => '1500.50', 'count' => 5];echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);// {"product":"Livro","price":1500.5,"count":5}?>Tratamento de estruturas aninhadas e objetos complexos
O PHP permite trabalhar com estruturas JSON profundamente aninhadas. Vejamos um exemplo de parsing de uma resposta complexa de uma API:
<?php// Vamos supor que esta seja uma resposta de uma API externa$apiResponse = '{ "status": "success", "data": { "users": [ {"id": 1, "name": "Ana", "roles": ["admin", "editor"]}, {"id": 2, "name": "Pedro", "roles": ["user"]} ], "pagination": { "page": 1, "totalPages": 3 } }}';
$parsed = json_decode($apiResponse, true);
// Obtendo os nomes de todos os usuários$names = array_column($parsed['data']['users'], 'name');print_r($names); // Array ( [0] => Ana [1] => Pedro )
// Verificando se um usuário tem o papel de adminforeach ($parsed['data']['users'] as $user) { if (in_array('admin', $user['roles'])) { echo "{$user['name']} tem privilégios de administrador"; }}?>Tratamento de erros JSON
Um dos problemas mais comuns é o JSON inválido. O PHP fornece funções para diagnosticar erros:
json_last_error()— retorna