Introdução: por que o JSON no PHP parece uma bagunça?
\n\nImagine a seguinte situação: você escreveu um script em PHP que recebe dados de uma API ou gera uma resposta para o frontend. Você exibe o resultado com echo json_encode($data) — e obtém no navegador ou console algo como:
{"users":[{"id":1,"name":"João","email":"joao@example.com"},{"id":2,"name":"Maria","email":"maria@example.com"}]}\n\nConcorda que ler essa linha sem formatação é como tentar decifrar a letra de um médico? Principalmente quando há muitos dados e aninhamento profundo. É exatamente aqui que o pretty-print JSON em PHP entra em cena.
\n\nEste artigo é para quem está começando a trabalhar com PHP e JSON. Vamos explorar como tornar a saída JSON bonita, legível e fácil de depurar. Você aprenderá não apenas os métodos básicos, mas também truques úteis que economizarão horas de frustração. Vamos nessa!
\n\nO que é pretty-print e por que você precisa dele?
\n\nPretty-print (literalmente, "impressão bonita") é a formatação de dados com indentação, quebras de linha e alinhamento. No caso do JSON, isso significa que, em vez de uma única linha longa, você obtém uma saída estruturada onde cada chave e valor estão em seus devidos lugares.
\n\nImagine que você está depurando uma requisição de API ou verificando um arquivo de configuração. Sem o pretty-print, você perderá um tempo enorme tentando entender onde um objeto termina e outro começa. Com a formatação, tudo fica claro como água.
\n\nNo PHP, existem várias maneiras de obter uma saída JSON bonita. Vamos começar com a mais simples e popular: o uso da flag JSON_PRETTY_PRINT.
Método 1: JSON_PRETTY_PRINT — seu melhor amigo
\n\nA maneira mais simples de fazer pretty-print JSON em PHP é usar a constante JSON_PRETTY_PRINT ao chamar a função json_encode(). Essa constante está disponível desde o PHP 5.4.0.
Exemplo básico
\n\n<?php\n$data = [\n 'users' => [\n ['id' => 1, 'name' => 'João', 'email' => 'joao@example.com'],\n ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com']\n ]\n];\n\n$json = json_encode($data, JSON_PRETTY_PRINT);\necho $json;\n?>\n\nResultado:
\n\n{\n "users": [\n {\n "id": 1,\n "name": "João",\n "email": "joao@example.com"\n },\n {\n "id": 2,\n "name": "Maria",\n "email": "maria@example.com"\n }\n ]\n}\n\nBem melhor, não é? Cada elemento do array agora está em uma linha separada, a indentação está correta e a estrutura é intuitiva de ler.
\n\nCombinando com outras flags
\n\nJSON_PRETTY_PRINT pode e deve ser combinado com outras flags para um ajuste mais fino. Por exemplo:
- \n
- JSON_UNESCAPED_UNICODE — não escapa caracteres acentuados ou Unicode (em vez de
\\u00e1, você veráá). \n - JSON_UNESCAPED_SLASHES — não escapa barras (útil para URLs). \n
- JSON_NUMERIC_CHECK — converte strings que contêm números para o tipo numérico. \n
<?php\n$data = [\n 'message' => 'Olá, mundo!',\n 'url' => 'https://example.com/api/v1/users'\n];\n\n$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);\necho $json;\n?>\n\nResultado:
\n\n{\n "message": "Olá, mundo!",\n "url": "https://example.com/api/v1/users"\n}\n\nObserve: os caracteres acentuados são exibidos normalmente e as barras não foram escapadas. Essa é geralmente a melhor forma de exibir JSON para humanos.
\n\nMétodo 2: Formatando uma string JSON já existente
\n\nE se você já tiver uma string JSON (por exemplo, obtida de um arquivo ou banco de dados) e qui