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": "Иван", " Также в библиотеке
Работа с изображениями в C# (.NET): библиотеки, инструменты и примеры
JWT токены в C++: библиотека jwt-cpp для аутентификации
Парсинг HTML в C++: библиотеки и примеры для работы с DOM и XPath
Обработка изображений в Kotlin: resize и crop с библиотекой ImageMagick