-2

我的网络主机运行的是 PHP 5.3,但由于某种原因我不能使用 Json_decode()。这是为什么?我怎样才能让它工作?Json_decode() 有什么替代方案吗?

我这样使用它:

$data= json_decode($_POST['moment']);
var_dump($_POST['moment']);
foreach($data as $item) {
echo $item;

它输出: string(22) "[\"36\",\"37\",\"38\"]" 警告:在第 23 行为 foreach() 提供的参数无效

通过执行 var_dump() 我看到创建了字符串,但我无法让 json_decode 工作,创建数组 $data

谢谢

4

2 回答 2

4

json_decodeNULL当您要求它解码的字符串无效时返回。您可以使用它json_last_error来诊断问题。

当您要循环这样的数组时,您应该确保该值实际上是一个数组。

$data= json_decode($_POST['moment'], true);
if (!is_array($data)) {
  echo json_error_string(json_last_error());
} else {
    foreach($data as $item) {
        echo $item;
    }
}

根据手册中的代码:

function json_error_string ($json_error_code) {
   switch ($json_error_code) {
        case JSON_ERROR_NONE:
            return ' - No errors';
        break;
        case JSON_ERROR_DEPTH:
            return ' - Maximum stack depth exceeded';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            return ' - Underflow or the modes mismatch';
        break;
        case JSON_ERROR_CTRL_CHAR:
            return ' - Unexpected control character found';
        break;
        case JSON_ERROR_SYNTAX:
            return ' - Syntax error, malformed JSON';
        break;
        case JSON_ERROR_UTF8:
            return ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
        default:
            return ' - Unknown error';
        break;
    }
}

最后,您没有收到任何错误消息表明您已经error_reporting关闭或display_errors关闭。您需要使用 启用所有错误报告error_reporting(E_ALL & E_STRICT); ini_set('display_errors', '1');。从生产代码中删除它,但是当您积极工作时,您需要查看有关您正在创建的代码的所有可能信息。

文档

于 2012-09-08T17:26:00.877 回答
2

使用 stripslashes() 解决它:

$objJs = json_decode(stripslashes($_POST['obj']));
于 2013-12-05T15:37:45.410 回答