
header('Content-Type: application/json');
$data = ['status' => 'ok', 'code' => 200];
echo json_encode($data);
При использовании json_encode() стоит учитывать кодировку. Все строки должны быть в UTF-8. Иначе возможны ошибки при кодировании, особенно при работе с кириллическими символами.
Для отладки полезно использовать флаг JSON_PRETTY_PRINT, который делает JSON-строку более читаемой:
echo json_encode($data, JSON_PRETTY_PRINT);
header('Content-Type: application/json');
echo json_encode($data);
exit;
Также следует учитывать безопасность: не передавать чувствительные данные и не полагаться на json_encode() для фильтрации пользовательского ввода. При необходимости – валидировать и экранировать данные вручную.
Для корректной сериализации в JSON необходимо использовать ассоциативный массив, где ключи представлены строками. Это гарантирует преобразование в объект при вызове json_encode().
Пример корректной структуры:
$data = [
"id" => 101,
"name" => "Товар A",
"price" => 299.99,
"in_stock" => true
];
Если требуется вложенная структура, используйте многомерные ассоциативные массивы:
$user = [
"user_id" => 42,
"profile" => [
"first_name" => "Анна",
"last_name" => "Иванова",
"email" => "anna@example.com"
],
"roles" => ["admin", "editor"]
];
Для получения массива из результата запроса к базе данных используйте mysqli_fetch_assoc() или PDO::FETCH_ASSOC. Это сразу формирует ассоциативные массивы, готовые к сериализации.
Пример с PDO:
$stmt = $pdo->query("SELECT id, name FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
Перед сериализацией рекомендуется убедиться, что все значения совместимы с JSON. Ресурсы и объекты без метода __serialize() вызовут ошибку. Для исключения проблем, проверяйте типы данных через var_dump() или gettype().
Если нужно исключить определённые ключи, используйте array_filter() с кастомной функцией или unset():
unset($data["in_stock"]);
Корректное формирование массива исключает необходимость постобработки JSON и снижает риск ошибок при его использовании на клиентской стороне.
Преобразование массива в JSON с помощью функции json_encode()

Функция json_encode() применяется для конвертации массивов и объектов в строку JSON. Она принимает один обязательный аргумент – данные, которые необходимо преобразовать. Типичный пример:
$data = [
"имя" => "Андрей",
"возраст" => 32,
"активен" => true
];
$json = json_encode($data);
echo $json;
Результат выполнения: {"имя":"Андрей","возраст":32,"активен":true}.
По умолчанию функция экранирует не-ASCII символы, включая кириллицу. Чтобы сохранить читаемость, используйте флаг JSON_UNESCAPED_UNICODE:
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
Если в массиве содержатся ресурсы или циклические ссылки, json_encode() вернёт false. Проверяйте результат с помощью json_last_error():
$json = json_encode($data);
if ($json === false) {
echo "Ошибка: " . json_last_error_msg();
}
Для корректной сериализации вложенных структур и объектов, убедитесь, что они не содержат недопустимые типы данных. При работе с объектами пользовательских классов можно реализовать интерфейс JsonSerializable для контроля над преобразованием.
Установка заголовка Content-Type: application/json

Для корректной передачи JSON-данных клиенту необходимо явно указать заголовок Content-Type. Это позволяет браузеру или API-клиенту определить формат содержимого и правильно его интерпретировать.
- Правильный синтаксис:
header('Content-Type: application/json'); - При работе с API не добавляйте BOM (Byte Order Mark) в начало PHP-файла – он нарушает корректность заголовков.
<?php
header('Content-Type: application/json');
echo json_encode(['статус' => 'ок']);
exit;
Обработка ошибок при кодировании JSON

Функция json_encode() возвращает false при ошибке. Проверка результата обязательна, особенно при работе с массивами, содержащими специальные символы, ресурсы или замыкания.
После вызова json_encode() используйте json_last_error() для получения кода ошибки. Для расшифровки кода применяйте json_last_error_msg().
Пример проверки:
$json = json_encode($data);
if ($json === false) {
error_log('Ошибка JSON: ' . json_last_error_msg());
}
Наиболее частые ошибки: JSON_ERROR_UTF8 – некорректная кодировка строк; JSON_ERROR_RECURSION – зацикленные структуры; JSON_ERROR_UNSUPPORTED_TYPE – ресурсы, замыкания или объекты без сериализации.
Для устранения JSON_ERROR_UTF8 предварительно выполните перекодировку:
$data = mb_convert_encoding($data, 'UTF-8', 'auto');
Если возможна рекурсия, перед кодированием проверьте данные вручную или используйте функцию array_walk_recursive() для анализа вложенных массивов.
Не передавайте ресурсы (файловые дескрипторы, подключения) в json_encode(). Для объектов используйте интерфейс JsonSerializable, чтобы управлять сериализацией.
Для сериализации вложенных массивов и ассоциативных структур в JSON используется функция json_encode(). Она корректно обрабатывает многоуровневые массивы, включая массивы в объектах и наоборот. Пример вложенной структуры:
$data = [
'user' => [
'id' => 1,
'name' => 'Иван',
'contacts' => [
'email' => 'ivan@example.com',
'phones' => ['+123456789', '+987654321']
]
],
'active' => true
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
Флаг JSON_UNESCAPED_UNICODE сохраняет кириллические символы в читаемом виде. JSON_PRETTY_PRINT форматирует результат с отступами.
"успех",
"данные" => [
"id" => 123,
"имя" => "Иван",
"роль" => "админ"
]
];
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo '<pre>' . json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . '</pre>';
Форматированный JSON помогает быстро выявлять структуру, отсутствующие или некорректные поля. Особенно полезен при работе с REST API и AJAX-ответами.
