Как красиво вывести JSON в PHP: полный гайд для новичков

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: почему JSON в PHP выглядит как каша?

Представьте ситуацию: вы написали на PHP скрипт, который получает данные от API или формирует ответ для фронтенда. Вы выводите результат с помощью echo json_encode($data) — и получаете в браузере или консоли что-то вроде:

{"users":[{"id":1,"name":"Иван","email":"ivan@example.com"},{"id":2,"name":"Мария","email":"maria@example.com"}]}

Согласитесь, читать эту строку без форматирования — то же самое, что пытаться разобрать рукопись врача. Особенно если данных много, а вложенность глубокая. Именно здесь на помощь приходит pretty-printing JSON в PHP.

Эта статья — для тех, кто только начинает работать с PHP и JSON. Мы разберём, как сделать вывод JSON красивым, читаемым и удобным для отладки. Вы узнаете не только базовые методы, но и полезные лайфхаки, которые сэкономят вам часы нервов. Поехали!

Что такое pretty-print и зачем он нужен?

Pretty-print (дословно — «красивая печать») — это форматирование данных с отступами, переносами строк и выравниванием. В случае с JSON это означает, что вместо одной длинной строки вы получите структурированный вывод, где каждый ключ и значение находятся на своём месте.

Представьте, что вы отлаживаете API-запрос или проверяете конфигурационный файл. Без pretty-print вы потратите уйму времени, пытаясь понять, где заканчивается один объект и начинается другой. С форматированием — всё как на ладони.

В PHP есть несколько способов добиться красивого вывода JSON. Мы начнём с самого простого и популярного — использования флага JSON_PRETTY_PRINT.

Метод 1: JSON_PRETTY_PRINT — ваш лучший друг

Самый простой способ сделать pretty-print JSON в PHP — использовать константу JSON_PRETTY_PRINT при вызове функции json_encode(). Эта константа доступна начиная с PHP 5.4.0.

Базовый пример

<?php
$data = [
    'users' => [
        ['id' => 1, 'name' => 'Иван', 'email' => 'ivan@example.com'],
        ['id' => 2, 'name' => 'Мария', 'email' => 'maria@example.com']
    ]
];

$json = json_encode($data, JSON_PRETTY_PRINT);
echo $json;
?>

Результат:

{
    "users": [
        {
            "id": 1,
            "name": "Иван",
            "email": "ivan@example.com"
        },
        {
            "id": 2,
            "name": "Мария",
            "email": "maria@example.com"
        }
    ]
}

Уже гораздо лучше, правда? Каждый элемент массива теперь на отдельной строке, отступы расставлены, структура читается интуитивно.

Комбинируем с другими флагами

JSON_PRETTY_PRINT можно и нужно комбинировать с другими флагами для более тонкой настройки. Например:

  • JSON_UNESCAPED_UNICODE — не экранирует кириллицу и другие Unicode-символы (вместо \u0438\u0432\u0430\u043d вы увидите Иван).
  • JSON_UNESCAPED_SLASHES — не экранирует косые черты (полезно для URL).
  • JSON_NUMERIC_CHECK — преобразует строки, содержащие числа, в числовой тип.
<?php
$data = [
    'message' => 'Привет, мир!',
    'url' => 'https://example.com/api/v1/users'
];

$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo $json;
?>

Результат:

{
    "message": "Привет, мир!",
    "url": "https://example.com/api/v1/users"
}

Обратите внимание: кириллица отображается нормально, слеши не экранированы. Именно так обычно и нужно выводить JSON для человека.

Метод 2: Форматирование уже существующей JSON-строки

А что делать, если у вас уже есть JSON-строка (например, полученная из файла или из базы данных), и её нужно красиво вывести? Просто вызвать json_encode() на строке — не сработает, потому что это будет двойное кодирование.

Правильный подход: сначала декодировать строку в массив или объект с помощью json_decode(), а потом снова закодировать с флагом JSON_PRETTY_PRINT.

<?php
$uglyJson = '{"users":[{"id":1,"name":"Иван","email":"ivan@example.com"}]}';

// Декодируем в массив (второй параметр true)
$decoded = json_decode($uglyJson, true);

// Кодируем обратно с форматированием
$prettyJson = json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

echo $prettyJson;
?>

Результат:

{
    "users": [
        {
            "id": 1,
            "name": "Иван",
            "email": "ivan@example.com"
        }
    ]
}

Важно: если ваша JSON-строка повреждена (например, содержит лишнюю запятую или неверный синтаксис), json_decode() вернёт null. Всегда проверяйте результат:

<?php
$uglyJson = '{"name": "Иван",}'; // лишняя запятая

$decoded = json_decode($uglyJson, true);

if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) {
    echo 'Ошибка декодирования JSON: ' . json_last_error_msg();
} else {
    $prettyJson = json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    echo $prettyJson;
}
?>

Метод 3: Pretty-print для вывода в браузер

Когда вы выводите JSON в браузер (например, для отладки), не забудьте установить правильный заголовок Content-Type. Иначе браузер может попытаться интерпретировать JSON как HTML и скрыть форматирование.

<?php
header('Content-Type: application/json; charset=utf-8');

$data = [
    'status' => 'success',
    'data' => [
        'id' => 42,
        'name' => 'Тестовый пользователь'
    ]
];

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
?>

Теперь, если вы откроете этот скрипт в браузере, вы увидите красиво отформатированный JSON. Браузеры (Chrome, Firefox, Safari) умеют сворачивать и разворачивать узлы, что делает отладку ещё удобнее.

Метод 4: Pretty-print с сохранением в файл

Часто нужно не просто вывести JSON на экран, а

Блоги

Рекомендаций по книгам