Советы PHP-разработчика

Блог содержащий короткие заметки касающиеся программирования для web.

Ошибка JSON_ERROR_SYNTAX в php 7

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);
	}
}

Пример воспроизведения ошибки.

  • 2016-03-23 18:34:24