【问题标题】:Detecting json_decode() failure in PHP在 PHP 中检测 json_decode() 失败
【发布时间】:2011-01-20 05:20:40
【问题描述】:

当使用 PHP 的 json_decode() 时,我看不出有什么方法可以区分表示解码失败的 NULL 返回值和正确解码的 NULL 值:

var_dump(json_decode('nonsense')); // returns NULL
var_dump(json_decode(json_encode(NULL))); // also returns NULL

第一种情况不会引发异常。所以我不确定如何测试解码失败。

想法?

【问题讨论】:

  • 仅供参考,从技术上讲,JSON 文档不能只包含空值,因此不应该有任何东西可以区分它们。 PHP 可以很好地扩展 JSON 以包含数组和标量,如字符串、数字和 null,但这些在 JSON 文档的顶层无效。
  • 供他人参考,以上内容完全不真实,从未完全真实:tools.ietf.org/html/rfc7159#section-3

标签: php json


【解决方案1】:

您必须检查 json_last_error 是否有任何 JSON 解析错误。

json_decode($string);
switch(json_last_error()) {
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
}

【讨论】:

  • 这是 php 5.3 中的新功能,可以解释为什么我不知道它。感谢您指出。今天我会下载新的文档。
  • 没问题,很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
相关资源
最近更新 更多