Trabalho com JSON em PHP: parsing e serialização de dados

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que o PHP precisa de JSON?

JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que se tornou o padrão de facto para APIs web, arquivos de configuração e armazenamento de informações estruturadas. Apesar de sua origem no JavaScript, o JSON é perfeitamente suportado em todas as linguagens de programação modernas, incluindo o PHP.

No PHP, trabalhar com JSON é implementado nativamente por meio de duas funções principais: json_encode() (serialização — conversão de dados PHP em uma string JSON) e json_decode() (desserialização — análise de uma string JSON de volta para estruturas PHP). Neste artigo, examinaremos detalhadamente como usar essas ferramentas de forma eficaz, tratar erros e aplicar JSON em projetos reais.



1. Serialização de dados: a função json_encode()

A função json_encode() converte um valor PHP (array, objeto, string, número) em uma string no formato JSON. Isso é necessário quando você deseja enviar dados para um cliente (por exemplo, via AJAX) ou salvá-los em um arquivo.



Sintaxe básica e exemplos

<?php// Array simples$colors = ["red", "green", "blue"];echo json_encode($colors);// Saída: ["red","green","blue"]

// Array associativo$user = [ "name" => "Ivan", "age" => 30, "is_admin" => false];echo json_encode($user);// Saída: {"name":"Ivan","age":30,"is_admin":false}?>


Flags úteis do json_encode()

A função suporta um segundo parâmetro — uma máscara de bits de flags. Vamos ver as mais úteis:

  • JSON_PRETTY_PRINT — formata a saída com indentação para legibilidade.
  • JSON_UNESCAPED_UNICODE — não escapa caracteres cirílicos e outros Unicode (caso contrário, letras russas se transformam em \\uXXXX).
  • JSON_NUMERIC_CHECK — converte strings que contêm números em tipo numérico.
  • JSON_FORCE_OBJECT — força a transformação de um array em objeto, mesmo para arrays indexados.


<?php$data = ["name" => "Anna", "age" => "25"];

// Sem flagsecho json_encode($data);// {"name":"\\u0410\\u043d\\u043d\\u0430","age":"25"}

// Com flagsecho json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);/*{ "name": "Anna", "age": "25"}*/?>


2. Análise de JSON: a função json_decode()

A função json_decode() realiza a operação inversa — transforma uma string JSON de volta em uma variável PHP. Por padrão, ela retorna um objeto da classe stdClass, mas você pode solicitar um array associativo.



Análise em objeto e em array

<?php$jsonString = '{"name":"Peter","age":28,"skills":["PHP","MySQL"]}';

// Padrão — objeto$obj = json_decode($jsonString);echo $obj->name; // Peterecho $obj->skills[0]; // PHP

// Com a flag true — array associativo$arr = json_decode($jsonString, true);echo $arr["name"]; // Peterecho $arr["skills"][1]; // MySQL?>


Profundidade de recursão

O terceiro parâmetro depth limita a profundidade de aninhamento. O padrão é 512 níveis. Isso é uma proteção contra ataques do tipo "billion laughs":

<?php$malicious = '{"a":{"b":{"c":"d"}}}';$result = json_decode($malicious, false, 2); // Máximo 2 níveis// Retornará null porque a profundidade foi excedida?>


3. Tratamento de erros ao trabalhar com JSON

Um dos problemas mais comuns é uma string JSON inválida. O PHP não lança uma exceção em caso de erro de análise, mas retorna null. Para entender o que deu errado, use as funções json_last_error() e json_last_error_msg().



Verificação de erros

<?php$badJson = '{"name": "Error, missing quote}';$data = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) { echo "Erro JSON: " . json_last_error_msg();}?>

Blogs

Book Recommendations