php json_decode() Возвращает null -- как понять что не так, какая именно ошибка JSON -- РЕШЕНИЕ
Primary tabs
Например, пусть имеется код вроде:
$postdata = \json_decode(file_get_contents('php://input'), true);
И он для входных данных:
$a = file_get_contents('php://input');
/*
Содержит:
user_id=10&diagnostics%5B0%5D%5Bid_diag%5D=1&diagnostics%5B0%5D%5Bmethodics_id%5D=1&diagnostics%5B0%5D%5Bserver_id%5D=-1&diagnostics%5B0%5D%5Bclient_id%5D=35&diagnostics%5B0%5D%5Bdate%5D=1460408440&diagnostics%5B0%5D%5Bdata%5D%5B%5D=52&diagnostics%5B0%5D%5Bdata%5D%5B%5D=52&diagnostics%5B0%5D%5Bdata%5D%5B%5D=82&diagnostics%5B0%5D%5Bdata%5D%5B%5D=85&diagnostics%5B0%5D%5Bdata%5D%5B%5D=65&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=15&diagnostics%5B0%5D%5Bdata%5D%5B%5D=17&diagnostics%5B0%5D%5Bdata%5D%5B%5D=12&diagnostics%5B0%5D%5Bdata%5D%5B%5D=58&diagnostics%5B0%5D%5Bdata%5D%5B%5D=5&diagnostics%5B0%5D%5Bdata%5D%5B%5D=96&diagnostics%5B0%5D%5Bdata%5D%5B%5D=22&diagnostics%5B0%5D%5Bdata%5D%5B%5D=69&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=36&diagnostics%5B0%5D%5Bdata%5D%5B%5D=87&diagnostics%5B0%5D%5Bdata%5D%5B%5D=52&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=14&diagnostics%5B0%5D%5Bdata%5D%5B%5D=21&diagnostics%5B0%5D%5Bdata%5D%5B%5D=54&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=58
*/возвращает null. Значит с JSON-ом что-то не то.
Чтобы выяснить что именно используйте json_last_error(), например так:
// укажите ваше декодируемое (которое нужно раскодировать) значение в $string
$string = 'user_id=10&diagnostics%5B0%5D%5Bid_diag%5D=1&diagnostics%5B0%5D%5Bmethodics_id%5D=1&diagnostics%5B0%5D%5Bserver_id%5D=-1&diagnostics%5B0%5D%5Bclient_id%5D=35&diagnostics%5B0%5D%5Bdate%5D=1460408440&diagnostics%5B0%5D%5Bdata%5D%5B%5D=52&diagnostics%5B0%5D%5Bdata%5D%5B%5D=52&diagnostics%5B0%5D%5Bdata%5D%5B%5D=82&diagnostics%5B0%5D%5Bdata%5D%5B%5D=85&diagnostics%5B0%5D%5Bdata%5D%5B%5D=65&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=15&diagnostics%5B0%5D%5Bdata%5D%5B%5D=17&diagnostics%5B0%5D%5Bdata%5D%5B%5D=12&diagnostics%5B0%5D%5Bdata%5D%5B%5D=58&diagnostics%5B0%5D%5Bdata%5D%5B%5D=5&diagnostics%5B0%5D%5Bdata%5D%5B%5D=96&diagnostics%5B0%5D%5Bdata%5D%5B%5D=22&diagnostics%5B0%5D%5Bdata%5D%5B%5D=69&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=36&diagnostics%5B0%5D%5Bdata%5D%5B%5D=87&diagnostics%5B0%5D%5Bdata%5D%5B%5D=52&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=14&diagnostics%5B0%5D%5Bdata%5D%5B%5D=21&diagnostics%5B0%5D%5Bdata%5D%5B%5D=54&diagnostics%5B0%5D%5Bdata%5D%5B%5D=45&diagnostics%5B0%5D%5Bdata%5D%5B%5D=58';
echo 'Декодируем: ' . $string;
json_decode($string);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - Ошибок нет';
break;
case JSON_ERROR_DEPTH:
echo ' - Достигнута максимальная глубина стека';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Некорректные разряды или не совпадение режимов';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Некорректный управляющий символ';
break;
case JSON_ERROR_SYNTAX:
echo ' - Синтаксическая ошибка, не корректный JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Некорректные символы UTF-8, возможно неверная кодировка';
break;
default:
echo ' - Неизвестная ошибка';
break;
}
echo PHP_EOL;
- Log in to post comments
- 4093 reads