谷歌应用引擎上的PHP json_decode - 残留行为

时间:2018-04-30 14:28:24

标签: php google-app-engine

我在谷歌应用引擎上使用php的json_decode面临一个奇怪的问题。对于以数字开头的任何字符串,json_decode返回一个响应,显示它是一个有效的json字符串,而不是。例如,如果我执行json_decode('508'),则返回508.如果我执行json_decode('2018-04-30'),则返回2018。

这可能是运行php'json_decode的谷歌应用引擎特定问题吗?因为这不适用于在谷歌应用引擎上运行它时的PHP。

1 个答案:

答案 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';