Introducción: ¿por qué el JSON en PHP parece un batiburrillo?
\n\nImagine la situación: ha escrito un script en PHP que obtiene datos de una API o genera una respuesta para el frontend. Muestra el resultado usando echo json_encode($data) — y obtiene en el navegador o la consola algo como:
{"users":[{"id":1,"name":"Иван","email":"ivan@example.com"},{"id":2,"name":"Мария","email":"maria@example.com"}]}\n\nDe acuerdo, leer esta cadena sin formato es como intentar descifrar la letra de un médico. Especialmente si hay muchos datos y la anidación es profunda. Aquí es donde viene al rescate el pretty-printing JSON en PHP.
\n\nEste artículo es para aquellos que recién comienzan a trabajar con PHP y JSON. Analizaremos cómo hacer que la salida JSON sea bonita, legible y fácil de depurar. Aprenderá no solo los métodos básicos, sino también trucos útiles que le ahorrarán horas de frustración. ¡Empecemos!
\n\n¿Qué es pretty-print y para qué sirve?
\n\nPretty-print (literalmente, «impresión bonita») es el formateo de datos con sangrías, saltos de línea y alineación. En el caso de JSON, esto significa que, en lugar de una larga cadena, obtendrá una salida estructurada donde cada clave y valor están en su lugar.
\n\nImagine que está depurando una solicitud de API o revisando un archivo de configuración. Sin pretty-print, perderá mucho tiempo tratando de entender dónde termina un objeto y comienza otro. Con el formateo, todo está claro como el agua.
\n\nEn PHP, hay varias formas de lograr una salida JSON bonita. Comenzaremos con la más simple y popular: usar la bandera JSON_PRETTY_PRINT.
Método 1: JSON_PRETTY_PRINT — su mejor amigo
\n\nLa forma más sencilla de hacer pretty-print JSON en PHP es usar la constante JSON_PRETTY_PRINT al llamar a la función json_encode(). Esta constante está disponible desde PHP 5.4.0.
Ejemplo básico
\n\n<?php\n$data = [\n 'users' => [\n ['id' => 1, 'name' => 'Иван', 'email' => 'ivan@example.com'],\n ['id' => 2, 'name' => 'Мария', '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": "Иван",\n "email": "ivan@example.com"\n },\n {\n "id": 2,\n "name": "Мария",\n "email": "maria@example.com"\n }\n ]\n}\n\nMucho mejor, ¿verdad? Cada elemento del array ahora está en una línea separada, las sangrías están colocadas, la estructura se lee intuitivamente.
\n\nCombinando con otras banderas
\n\nJSON_PRETTY_PRINT se puede y debe combinar con otras banderas para un ajuste más fino. Por ejemplo:
- \n
- JSON_UNESCAPED_UNICODE — no escapa caracteres cirílicos y otros caracteres Unicode (en lugar de
\\u0438\\u0432\\u0430\\u043dveráИван). \n - JSON_UNESCAPED_SLASHES — no escapa las barras inclinadas (útil para URL). \n
- JSON_NUMERIC_CHECK — convierte cadenas que contienen números al tipo numérico. \n
<?php\n$data = [\n 'message' => 'Привет, мир!',\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": "Привет, мир!",\n "url": "https://example.com/api/v1/users"\n}\n\nObserve: el cirílico se muestra normalmente, las barras no están escapadas. Así es como normalmente se debe mostrar JSON para una persona.
\n\nMétodo 2: Formateo de una cadena JSON existente
\n\n¿Y qué hacer si ya tiene una cadena JSON (por ejemplo, obtenida de un archivo o de una base de datos) y e