我的网站主机运行的是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
由于
答案 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');
启用所有错误报告。从生产代码中删除它,但在您正在积极工作时,您需要查看有关您正在创建的代码的所有可能信息。
<强>文档强>
json_decode
- http://php.net/manual/en/function.json-decode.php json_last_error
- http://php.net/manual/en/function.json-last-error.php is_array
- http://php.net/manual/en/function.is-array.php 答案 1 :(得分:2)
使用stripslashes()解决它:
$objJs = json_decode(stripslashes($_POST['obj']));