Ошибка json_decode при обработке данных из файла (JSON_ERROR_SYNTAX)

20.07.2021

Столкнулся с ошибкой JSON_ERROR_SYNTAX при чтении JSON файла. При этом скопированное содержимое отлично обрабатывается и валидируется, например, серивосом jsoneditoronline.

Совет: т.к. 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;
    }


Категории: PHP
Яндекс.Метрика