警告:json_decode()期望参数1为字符串,给定数组

时间:2014-09-09 12:07:12

标签: php

以下是代码:

<? $fields = json_decode($this->item->extra_fields); 
$allowed_fields= array('3','5');  
if ( $fields != NULL ) { 
foreach ( $fields as $field ) { 
if ( in_array($field->id, $allowed_fields ) && $field->value != NULL) {  
?>
<span class = "list_for<? echo $field->id; ?>">
<? echo $field->value;?></span><? }   } }?>

当我将json_decode更改为json_encode时,我收到以下错误:

Warning: Invalid argument supplied for foreach()...
----------

从PHP升级到5.4之前一切正常。

我不是开发人员,所以请尽量不要太技术化。提前谢谢!

5 个答案:

答案 0 :(得分:2)

如上所述in the manual,就像这样做

$fields = json_decode($this->item->extra_fields, true); 

当为TRUE时,返回的对象将被转换为关联数组。

$ fields将是一个数组,foreach()将起作用

答案 1 :(得分:0)

您无法检查其NULL

<? $fields = json_decode($this->item->extra_fields); 
$allowed_fields= array('3','5');  
if($fields) {
foreach ( $fields as $field ) { 
if ( in_array($field->id, $allowed_fields ) && $field->value != NULL) {  
?>
<span class = "list_for<? echo $field->id; ?>">
<? echo $field->value;?></span><? }   } }?>

尝试if($fields) {

如果他能解码json字符串,你就会得到真的。

答案 2 :(得分:0)

<?php 
$fields = json_decode($this->item->extra_fields); 
$allowed_fields= array('3','5');  
if ( !empty($fields) ) { 
  foreach ( $fields as $key => $field ) { 
    if ( in_array($field->id, $allowed_fields ) && !empty($field->value)) {  
   ?>
      <span class = "list_for<?php echo $field->id; ?>">
      <?php echo $field->value;?></span>
  <?php 
  }   
 } 
} 
?>

请复制粘贴此代码并检查错误是否删除。 您无法使用NULL检查$字段。因此您只需使用!empty($ fields)

进行检查

答案 3 :(得分:0)

请注意 json_decode 接受字符串,根据上述错误,您尝试将数组传递给它,因此如果您需要迭代字段数组,则可能需要忽略 json_decode ,因为你似乎已经有了一个数组。

json_encode 接受数组,但它会提供一个字符串,以便在您尝试迭代sting时给出警告

请尝试下面的代码。

<? $fields = $this->item->extra_fields; 
$allowed_fields= array('3','5');  
if ( $fields ) { 
foreach ( $fields as $field ) { 
if ( in_array($field->id, $allowed_fields ) && $field->value != NULL) {  
?>
<span class = "list_for<? echo $field->id; ?>">
<? echo $field->value;?></span><? }   } }?>

答案 4 :(得分:0)

测试一下。在发送到PHP之前,将jsonObj更改为string。

jsonObj{..}

jsonObj2=JSON.stringify(jsonObj);
$.ajax({
   type: "POST",
   url:"Methods.php",
   data : { 'Json_data':jsonObj2},
   success: function(response) {
    console.log("Result:" + response);
   }
});