stdClass类的对象无法转换为字符串错误


Object of class stdClass could not be converted to string error

我有以下字符串:

{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}],"Scan":"Whatever"}

我想在php中解码。该字符串是通过sql查询获得的。参见以下代码:

$TrackDetails_Query= "SELECT * FROM Tracks WHERE TrackID='".$TrackNum."' ORDER BY TrackID DESC";
        $TrackDetails_Result= mysql_query($TrackDetails_Query) or die (mysql_error());
        if (mysql_num_rows($TrackDetails_Result)==0){
                echo 'There are no tracks for the number entered';
            }
        else{
                            $traces=$row['Traces'];
                            $decoded_traces=json_decode($traces);
                            echo $decoded_traces;
            }
    }

但我得到了错误:

Catchable fatal error: Object of class stdClass could not be converted to string

您收到错误是因为您试图将stdClass对象转换为字符串,而它不支持这种操作。

尝试var_dump($decoded_traces)而不是echo $decoded_traces,它将给出您解码的对象的诊断视图(我认为这是您想要的)。你应该会发现它看起来像这个

class stdClass#1 (2) {
  public $Coords =>
  array(5) {
    [0] =>
    class stdClass#2 (4) {
      public $Accuracy =>
      string(2) "65"
      public $Latitude =>
      string(18) "53.277720488429026"
      public $Longitude =>
      string(18) "-9.012038778269686"
      public $Timestamp =>
      string(39) "Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"
    }
    [1] => (more of the same, edited for brevity)
    [2] =>
    [3] =>
    [4] =>
  }
  public $Scan =>
  string(8) "Whatever"
}

默认情况下,json_encode将创建如上所述的stdClass对象。如果您更喜欢关联数组,请将true作为第二个参数传递给json_decode,例如$decoded_traces=json_decode($traces, true);

此外,尽管stdClass不能转换为字符串,但您自己的类可以——实现__toString魔术方法的类可以转换为字符串!

使用json_encode($traces),这将把数组转换为字符串。json_decode()用于将字符串转换为数组或对象数组

而不是

 $decoded_traces=json_decode($traces);
 echo $decoded_traces;

尝试

$decoded_traces=json_decode($traces, true);
print_r $decoded_traces;

尝试使用$decoded_traces=json_decode($traces, true);

而不是这个$decoded_traces=json_decode($traces);

它将把stdClass转换为数组。请注意,$decoded_traces是数组,您可以根据需要使用。

这是一个古老的问题,仍然是为了让像我这样刚刚遇到它的人清楚地知道。

尝试json_encode($traces);

在我的情况下是

return var_dump(json_encode($result[0]));

结果是:

string(34) "{"id":1,"content":"test database"}"

$decoded_traces是一个对象。您不能简单地echo一个对象,因为这毫无意义。

如果要调试对象,请使用var_dump($decoded_traces)

我注意到,如果您使用$wpdb->get_row()方法,并且错过了添加最后一个参数,那么在wordpress中也可能发生这种情况

你只需要在函数的末尾添加另一个参数,这样你就会得到

$res = $wpdb->get_row("SELECT * FROM wp_options WHERE option_id = 1" ,ARRAY_A),它将输出一个数组而不是stdClass,那么你只需要像这个一样使用它

$res['option_value']