我们可以检测到JSON错误吗?

时间:2012-02-23 16:16:06

标签: php json

我正在使用json_encode(),我正在使用的文件将被解析为JavaScript网格。

例如:

Index.php有一个调用data.php的JavaScript,我将PHP数组解析为JSON。问题是,有没有办法知道Index.php是否正确获取数据。某种调试?

6 个答案:

答案 0 :(得分:2)

json_decode如果失败则会返回NULL

if (json_decode($your_json_var, true) === NULL)
{
    // NULL is returned if the json cannot be decoded or if the 
    // encoded data is deeper than the recursion limit.
}

为了完美保存,请与'null'进行比较:

if (json_decode($json, true) === NULL && $json !== 'null')
{
    // NULL is returned if the json cannot be decoded or if the 
    // encoded data is deeper than the recursion limit.
}

建议使用PHP 5.3或更高版本,它提供json_last_error的访问权限,当发生错误情况时,{{3}}会返回!== JSON_ERROR_NONE

答案 1 :(得分:2)

由于json_decode可能会返回文字TRUEFALSENULL值,因此检查问题的唯一100%安全方法是json_last_error

if (json_last_error() !== JSON_ERROR_NONE) {
   ... decoded with error ...
}

当然,这仅在PHP 5.3中添加。在此之前,您必须检查返回结构中的预期数据。

答案 2 :(得分:1)

您的Index.php脚本应返回状态代码以指示失败或成功。

请参阅RFC 2616 - 10 Status Code Definitions

答案 3 :(得分:1)

您可以使用类似Firebug的Firefox或Chrome的开发者工具来检查您的JavaScript。

使用JSONLint验证您的JSON。

答案 4 :(得分:1)

  

...有没有一种方法可以让您了解Index.php是否正确获取数据。还是某种调试?

如果您正在使用正确的客户端调试器(并且2012年不会no excuse!),您可以使用“网络”选项卡或类似信息查看数据来回到服务器。我假设您并不期望json_encode生成无效的JSON,因为不是您期望的数据(例如,您正在尝试使用该结构等)。您可以将发回的数据复制到客户端,然后将其粘贴到http://jsonlint.com中以重新格式化,以便查看最终结果。

答案 5 :(得分:1)

如果您正在使用jQuery等库来进行JavaScript交互,那么如果您选择监视它,则会引发错误事件。 请在此处查看“错误”:http://api.jquery.com/jQuery.ajax/

您也可以直接在浏览器中调用data.php文件,看看您期望的数据是否正在返回。