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": {