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

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

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

Начать курс

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

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

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

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

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

Пример: кодирование массива в JSON

<?php
$data = [
    'name' => 'Alice',
    'age' => 30,
    'is_student' => false,
    'skills' => ['PHP', 'JavaScript', 'Python']
];

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

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

{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "skills": [
        "PHP",
        "JavaScript",
        "Python"
    ]
}

Пример: декодирование JSON в массив

<?php
$jsonString = '{"name":"Bob","age":25,"is_active":true}';

// Второй параметр true — возвращает ассоциативный массив
$array = json_decode($jsonString, true);
print_r($array);
?>

Результат:

Array
(
    [name] => Bob
    [age] => 25
    [is_active] => 1
)

Флаги для тонкой настройки

Функции json_encode() и json_decode() поддерживают второй параметр — битовую маску флагов. Рассмотрим наиболее полезные:

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

Пример с кириллицей и форматированием

<?php
$data = [
    'name' => 'Алексей',
    'city' => 'Москва'
];

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

Результат:

{
    "name": "Алексей",
    "city": "Москва"
}

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

Если входная строка не является валидным JSON, json_decode() вернет null. Чтобы узнать точную причину ошибки, используйте функцию json_last_error() и json_last_error_msg().

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

$result = json_decode($invalidJson);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo 'Ошибка: ' . json_last_error_msg();
} else {
    print_r($result);
}
?>

Вывод:

Ошибка: Syntax error

Полный список констант ошибок:

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

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

JSON часто содержит вложенные объекты и массивы. PHP позволяет легко обрабатывать такие данные с помощью рекурсии или циклов.

<?php
$complexJson = '{
    "users": [
        {"name": "Alice", "age": 30},
        {"name": "Bob", "age": 25}
    ],
    "meta": {                    

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