Работа с JSON в PHP: парсинг и сериализация для начинающих

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

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

Начать курс

Введение в работу с JSON в PHP

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

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

К концу статьи вы научитесь:

  • Преобразовывать PHP-массивы и объекты в JSON
  • Парсить JSON-строки в ассоциативные массивы и объекты
  • Обрабатывать ошибки при работе с JSON
  • Использовать вложенные структуры данных

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

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

json_encode() — сериализация данных

Функция json_encode() преобразует переменную PHP (массив, объект, строку, число) в JSON-строку. Это называется сериализацией.

Пример базового использования:

<?php
// Ассоциативный массив
$user = [
    "name" => "Иван",
    "age" => 28,
    "email" => "ivan@example.com",
    "is_active" => true
];

$json = json_encode($user);
echo $json;
// Вывод: {"name":"Иван","age":28,"email":"ivan@example.com","is_active":true}
?>

Функция автоматически преобразует типы данных PHP в соответствующие типы JSON:

  • Строки → строки JSON
  • Числа → числа JSON
  • Логические значения → true/false
  • Массивы → объекты или массивы JSON (зависит от ключей)
  • NULL → null

json_decode() — парсинг JSON

Функция json_decode() выполняет обратную операцию — преобразует JSON-строку в переменную PHP. Это называется парсингом.

Пример:

<?php
$jsonString = '{"name":"Иван","age":28,"email":"ivan@example.com","is_active":true}';

// Парсинг в объект (по умолчанию)
$userObject = json_decode($jsonString);
echo $userObject->name; // Вывод: Иван

// Парсинг в ассоциативный массив (второй параметр true)
$userArray = json_decode($jsonString, true);
echo $userArray["name"]; // Вывод: Иван
?>

Обратите внимание на второй параметр функции json_decode():

  • false (по умолчанию) — возвращает объекты stdClass
  • true — возвращает ассоциативные массивы

Продвинутые возможности и обработка ошибок

Работа с вложенными структурами

JSON поддерживает вложенные объекты и массивы. PHP легко справляется с такими структурами:

<?php
// Сложная структура данных
$data = [
    "company" => "TechCorp",
    "employees" => [
        ["name" => "Анна", "position" => "Developer"],
        ["name" => "Петр", "position" => "Designer"],
        ["name" => "Мария", "position" => "Manager"]
    ],
    "address" => [
        "city" => "Москва",
        "street" => "Тверская",
        "building" => 10
    ]
];

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

Результат будет отформатирован для удобочитаемости благодаря флагу JSON_PRETTY_PRINT.

Обработка ошибок при парсинге

При работе с внешними данными (API, файлы) важно проверять, что JSON корректен. Используйте функцию json_last_error():

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

$result = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) {
    echo "Ошибка парсинга JSON: " . json_last_error_msg();
    // Вывод: Ошибка парсинга JSON: Syntax error
} else {
    print_r($result);
}
?>

Основные константы ошибок:

  • JSON_ERROR_NONE — ошибок нет
  • JSON_ERROR_DEPTH — превышена максимальная глубина вложенности
  • JSON_ERROR_STATE_MISMATCH — неверный формат JSON
  • JSON_ERROR_SYNTAX — синтаксическая ошибка
  • JSON_ERROR_UTF8 — некорректный UTF-8 символ

Полезные флаги json_encode()

Функция json_encode() поддерживает множество флагов для тонкой настройки вывода:

<?php
$data = [
    "name" => "Иван",
    "age" => 28,
    "skills" => ["PHP", "JavaScript", "Python"]
];

// Форматирование с отступами
echo json_encode($data, JSON_PRETTY_PRINT);

// Экранирование Unicode (по умолчанию)
echo json_encode($data, JSON_UNESCAPED_UNICODE);

// Без экранирования слешей
echo json_encode($data, JSON_UNESCAPED_SLASHES);

// Комбинация флагов
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
?>

Практические примеры использования JSON в PHP

Работа с API

JSON — основной формат обмена данными в REST API. Рассмотрим пример получения данных с внешнего сервера:

<?php
// Получаем данные с API
$apiUrl = "https://api.example.com/users/1";
$response = file_get_contents($apiUrl);

if ($response === false)                

Блоги

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