使用JSON解码PHP 5.3

时间:2012-09-08 17:18:34

标签: php json

我的网站主机运行的是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

由于

2 个答案:

答案 0 :(得分:4)

当您要求解码的字符串无效时,

json_decode会返回NULL。您可以使用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');启用所有错误报告。从生产代码中删除它,但在您正在积极工作时,您需要查看有关您正在创建的代码的所有可能信息。

<强>文档

答案 1 :(得分:2)

使用stripslashes()解决它:

$objJs = json_decode(stripslashes($_POST['obj']));