2012-09-08 60 views
-2

我的网络主机运行PHP 5.3,但出于某种原因,我不能使用Json_decode()。这是为什么?我怎样才能使它工作?有没有其他的Json_decode()?使用JSON解码PHP 5.3

我使用这样的:

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

并将其输出这样的: 串(22) “[\” 36 \ “\ ”37 \“,\ ”38 \“]” 警告:行23

为的foreach()提供通过做的var_dump()我看到字符串被创建,但我不能让json_decode工作,以创建数组$数据

感谢

参数无效
+3

您在执行脚本期间检查了PHP错误吗? – Jocelyn

+2

“不起作用”如何?它是否会给出“未定义的函数”错误? –

+2

你是什么意思,你不能使用它?错误? IT不说? – AlienWebguy

回答

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');启用所有错误报告。将其从生产代码中移除,但在您积极工作时,您需要查看有关您所创建的代码的所有可能信息。

文档

+0

它返回的错误是语法错误,格式不正确的JSON – user1592953

+0

+1。你也可以在对象上使用'foreach',而不仅仅是一个数组,fyi。 – AlienWebguy

+0

我几乎总是把关联数组。当你通常不使用它们时,随机附带的'stdObject'在你的代码周围浮动就是要求悲伤。如果你对其他的东西使用'stdObject',或者你正在处理带有对象参数的函数或方法,那么它是有道理的。否则,我采取阵列。 @AlienWebguy - 你可以使用实现迭代接口的对象,但是不能使用任何旧对象。 stdClass是可迭代的,但正如我所说......为什么要麻烦? –

2

解决它使用stripslashes()函数:

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