Как прочитать JSON из тела запроса
Короткий ответ
Данные, отправленные как JSON, не попадают в $_POST. Прочитайте тело запроса из php://input:
<?php
// api.php
$data = json_decode(file_get_contents('php://input'), true);
echo $data['name'] ?? 'no name';С проверкой
Неверный JSON должен давать ответ с кодом 400:
<?php
// api.php
header('Content-Type: application/json');
try {
$data = json_decode(file_get_contents('php://input'), true, flags: JSON_THROW_ON_ERROR);
} catch (JsonException) {
http_response_code(400);
exit(json_encode(['error' => 'Invalid JSON']));
}
echo json_encode(['received' => $data]);Функции из этого ответа
- json_decode — Разбирает строку JSON.
- file_get_contents — Читает файл целиком в строку.
- http_response_code — Задаёт или возвращает код состояния ответа.