我在谷歌应用引擎上使用php的json_decode面临一个奇怪的问题。对于以数字开头的任何字符串,json_decode返回一个响应,显示它是一个有效的json字符串,而不是。例如,如果我执行json_decode('508'),则返回508.如果我执行json_decode('2018-04-30'),则返回2018。
这可能是运行php'json_decode的谷歌应用引擎特定问题吗?因为这不适用于在谷歌应用引擎上运行它时的PHP。
答案 0 :(得分:0)
<强> TL;博士强>
json_decode('2018-04-30')
错误,应为json_decode('"2018-04-30"')
Something 正在为您的PHP提供错误的JSON。
如何检查错误的JSON字符串
$var = '2018-04-30';
// Note: $decoded_json will still be 2018 due to PHP's handling of string to int in this case but there will be a JSON error
$decoded_json = json_decode($var);
if(json_last_error() === JSON_ERROR_NONE)
{
echo 'Good JSON!';
}
else
{
echo 'Bad JSON: '.json_last_error_msg();
// We can try wrapping the $var in double quotes to try and force good JSON since the data source is untrusted
$decoded_json = json_decode('"'.$var.'"');
if(json_last_error() === JSON_ERROR_NONE)
{
echo 'Fixable JSON!';
}
else
{
echo 'Really bad JSON: '.json_last_error_msg();
}
}
json_decode('2018-04-30')
给出了2018
因为2018-04-30
没有引用,并且转换为PHP的最佳能力。试试这个以更好地掌握PHP的行为:
echo (int)'2018-04-30';