JSON обработка в PHP: функции, примеры и best practices

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

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

Начать курс

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

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

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

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

  • json_encode() — преобразует PHP-значение (массив, объект, строку) в JSON-строку.
  • json_decode() — декодирует JSON-строку обратно в PHP-значение.

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

<?php
// Исходные данные: ассоциативный массив
$data = [
    'name' => 'Иван',
    'age' => 30,
    'skills' => ['PHP', 'JavaScript', 'Python']
];

// Кодируем в JSON
$jsonString = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $jsonString;
?>

Результат выполнения:

{
    "name": "Иван",
    "age": 30,
    "skills": [
        "PHP",
        "JavaScript",
        "Python"
    ]
}

Флаг JSON_UNESCAPED_UNICODE сохраняет кириллицу без экранирования, а JSON_PRETTY_PRINT форматирует вывод с отступами для читаемости.

Пример декодирования JSON в PHP

<?php
$jsonString = '{"name":"Анна","age":25,"city":"Москва"}';

// Декодируем в ассоциативный массив (второй аргумент true)
$array = json_decode($jsonString, true);
echo $array['name']; // Анна
echo $array['city']; // Москва

// Декодируем в объект (по умолчанию)
$object = json_decode($jsonString);
echo $object->name; // Анна
?>

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

При работе с внешними данными важно проверять корректность JSON. Для этого используйте json_last_error() и json_last_error_msg():

<?php
$invalidJson = '{name: "Ошибка"}'; // Невалидный JSON (нет кавычек у ключа)

$decoded = json_decode($invalidJson);

if (json_last_error() !== JSON_ERROR_NONE) {
    $errorMsg = json_last_error_msg();
    echo "Ошибка декодирования JSON: $errorMsg";
    // Вывод: Ошибка декодирования JSON: Syntax error
}
?>

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

JSON отлично подходит для сложных иерархических данных. Рассмотрим пример с вложенными массивами и объектами:

<?php
$complexData = [
    'users' => [
        [
            'id' => 1,
            'name' => 'Петр',
            'orders' => [
                ['product' => 'Ноутбук', 'price' => 75000],
                ['product' => 'Мышь', 'price' => 1500]
            ]
        ],
        [
            'id' => 2,
            'name' => 'Мария',
            'orders' => []
        ]
    ],
    'total_orders' => 2
];

$json = json_encode($complexData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
file_put_contents('data.json', $json); // Сохраняем в файл

// Читаем обратно
$jsonFromFile = file_get_contents('data.json');
$restoredData = json_decode($jsonFromFile, true);

// Доступ к вложенным данным
echo $restoredData['users'][0]['orders'][0]['product']; // Ноутбук
?>

Продвинутые опции json_encode()

PHP поддерживает множество флагов для тонкой настройки кодирования:

  • JSON_FORCE_OBJECT — принудительно кодирует массив как объект.
  • JSON_NUMERIC_CHECK — преобразует числовые строки в числа.
  • JSON_UNESCAPED_SLASHES — не экранирует слэши.
  • JSON_THROW_ON_ERROR — выбрасывает исключение при ошибке (PHP 7.3+).
<?php
$array = ['key' => 'value', 'number' => '123'];

// Без флагов
echo json_encode($array); // {"key":"value","number":"123"}

// С JSON_NUMERIC_CHECK
echo json_encode($                    

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