У меня есть что-то вроде следующего кода:
<?php
$str = "76017060710034014696970658200876993546";
if(json_decode($str) !== null && json_decode($str) !== false){
var_dump(json_decode($str));
}
?>
Это приводит к следующему:
int(9223372036854775807)
Конечно, это не строка json, и я ожидал, что json_decode вернет либо ноль, либо false, как описано в руководство:
Возвращаемые значения
Возвращает значение, закодированное в json в соответствующем типе PHP. Ценности
true, false и null возвращаются как TRUE, FALSE и NULL
соответственно. NULL возвращается, если JSON не может быть декодирован или если
закодированные данные глубже, чем предел рекурсии.
Как это возможно? Это ошибка или я что-то упустил?
Вам не хватает опции JSON_BIGINT_AS_STRING, кстати, строка является допустимым JSON. Попробуйте следующее:
var_dump(json_decode($str, false, 512, JSON_BIGINT_AS_STRING));
Других решений пока нет …