JSON обработка в PHP: Полное руководство по работе с JSON

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

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

Начать курс

JSON обработка в PHP: Полное руководство

JSON (JavaScript Object Notation) — это легковесный формат обмена данными, который стал стандартом де-факто для взаимодействия между клиентом и сервером, а также между различными веб-сервисами. В PHP работа с JSON реализована нативно и не требует установки дополнительных расширений, что делает его одним из самых удобных языков для парсинга и генерации JSON-данных. В этой статье мы подробно разберем все аспекты JSON обработки в PHP: от базовых функций до продвинутых техник и обработки ошибок.

Основные функции PHP для работы с JSON

PHP предоставляет две ключевые функции для работы с JSON:

  • json_encode($value, $options = 0, $depth = 512) — преобразует PHP-значение (массив, объект, строку, число) в JSON-строку.
  • json_decode($json, $associative = false, $depth = 512, $options = 0) — декодирует JSON-строку обратно в PHP-значение. Если параметр $associative установлен в true, возвращается ассоциативный массив, иначе — объект stdClass.

Рассмотрим простейший пример:

<?php
// Создаем ассоциативный массив
$data = [
    "name" => "Иван",
    "age" => 30,
    "city" => "Москва",
    "skills" => ["PHP", "JavaScript", "Python"]
];

// Кодируем в JSON
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
// Вывод:
// {
//     "name": "Иван",
//     "age": 30,
//     "city": "Москва",
//     "skills": ["PHP", "JavaScript", "Python"]
// }

// Декодируем обратно в массив
$decoded = json_decode($json, true);
echo $decoded['name']; // Иван
?>

Важные опции json_encode

Функция json_encode поддерживает множество флагов, которые изменяют поведение кодирования. Наиболее полезные из них:

  • JSON_UNESCAPED_UNICODE — не экранирует Unicode-символы (кириллица, эмодзи). Без этого флага русские буквы будут преобразованы в \uXXXX.
  • JSON_PRETTY_PRINT — форматирует вывод с отступами и переносами строк для читаемости.
  • JSON_NUMERIC_CHECK — преобразует числовые строки в числа.
  • JSON_FORCE_OBJECT — принудительно создает объект вместо массива, даже если массив пустой или индексированный.
  • JSON_PRESERVE_ZERO_FRACTION — сохраняет дробную часть для целых чисел (например, 10.0).

Пример комбинирования опций:

<?php
$data = ['product' => 'Книга', 'price' => '1500.50', 'count' => 5];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);
// {"product":"Книга","price":1500.5,"count":5}
?>

Обработка вложенных структур и сложных объектов

PHP позволяет работать с глубоко вложенными JSON-структурами. Рассмотрим пример парсинга сложного ответа от API:

<?php
// Представим, что это ответ от внешнего API
$apiResponse = '{
    "status": "success",
    "data": {
        "users": [
            {"id": 1, "name": "Анна", "roles": ["admin", "editor"]},
            {"id": 2, "name": "Петр", "roles": ["user"]}
        ],
        "pagination": {
            "page": 1,
            "totalPages": 3
        }
    }
}';

$parsed = json_decode($apiResponse, true);

// Достаем имена всех пользователей
$names = array_column($parsed['data']['users'], 'name');
print_r($names); // Array ( [0] => Анна [1] => Петр )

// Проверяем, есть ли у пользователя роль admin
foreach ($parsed['data']['users'] as $user) {
    if (in_array('admin', $user['roles'])) {
        echo "{$user['name']} имеет права администратора\n";
    }
}
?>

Обработка ошибок JSON

Одна из самых частых проблем — некорректный JSON. PHP предоставляет функции для диагностики ошибок:

  • json_last_error() — возвращает код последней ошибки (целое число).
  • json_last_error_msg() — возвращает текстовое описание ошибки (доступно с PHP 5.5).

Всегда проверяйте результат декодирования:

<?php
$brokenJson = '{"name": "Иван", "                    

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