Ошибка JSON_ERROR_SYNTAX в php 7
Недавно в одном из проектов обнаружилась проблема при тестировании на PHP 7. Тесты прогоняются на PHP 5.5.x, 5.6.x, 7.0.x и hhvm-3.12.x, но проваливаются они только на PHP 7. Проблема оказалась в функции json_decode()
. А теперь немного подробнее.
Начиная с версии 7.0.0 при попытке декодировать пустую строку или null
через функцию json_decode()
, происходит ошибка JSON_ERROR_SYNTAX
, которую можно получить через json_last_error()
. Но сама функция декодирования возвращает правильный результат - null
.
Таким образом, если вы просто преобразуете строку из json
-а, то все пройдет корректно. Но при отслеживании ошибок, возникнет указанная проблема. Будьте бдительны, а лучше напишите свой хелпер на основе json_decode
и используйте его. Например такой
class JsonHelper { public static function decode($s) { if ($s === null || $s === '') { return null; } return json_decode($s); } }
Пример воспроизведения ошибки.