Столкнулся с ошибкой JSON_ERROR_SYNTAX при чтении JSON файла. При этом скопированное содержимое отлично обрабатывается и валидируется, например, серивосом jsoneditoronline.
Ошибка json_decode при обработке данных из файла (JSON_ERROR_SYNTAX)
20.07.2021
Совет: т.к. json_decode не возвращает ошибку, то узнать ее можно воспользовавшись функцией json_last_error.
Проблема, в моем случаи, была с BOM (Byte Order Mark) который присутствовал в начале файла. Проблему решил так:
function removeBOM($data) {
if (0 === strpos(bin2hex($data), 'efbbbf')) {
return substr($data, 3);
}
return $data;
}
$string = removeBOM(file_get_contents('FILE.json'));
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;
}