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

Posted

技术标签:

【中文标题】类 stdClass 的对象无法转换为字符串错误【英文标题】:Object of class stdClass could not be converted to string error 【发布时间】:2013-07-03 14:37:20 【问题描述】:

我有以下字符串:

"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.ini 中解码。该字符串是通过 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

【问题讨论】:

您希望看到$decoded_traces 对象的哪一部分得到回显? 您的问题的标题具有误导性 - 我建议将其更改为“类 stdClass 的对象无法转换为字符串” 题目和题体有什么关系? 鉴于这是解码 JSON 的结果,您希望 echo $decoded_traces; 做什么? @deceze 我忘记改标题了,非常抱歉!当我偶然使用“编码”而不是解码时,就会发生这种情况。我意识到了这一点并更改了内容中的问题,但没有更改标题。 【参考方案1】:

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

而不是echo $decoded_traces 尝试var_dump($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 魔术方法的类可以转换为字符串!

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

试试这个 $decoded_traces=json_decode($traces, true);

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

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

【讨论】:

【参考方案4】:

这是一个老问题,仍然回答让像我这样刚遇到它的人清楚。

试试 json_encode($traces);

就我而言

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

结果是:

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

【讨论】:

【参考方案5】:

$decoded_traces 是一个对象。你不能简单地echo 一个对象,因为这没有任何意义。

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

【讨论】:

【参考方案6】:

代替

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

试试

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

【讨论】:

以上是关于类 stdClass 的对象无法转换为字符串错误的主要内容,如果未能解决你的问题,请参考以下文章

类 stdClass 的对象的问题无法转换为字符串

SQL 错误可捕获的致命错误:stdClass 类的对象无法转换为字符串

WordPress:可捕获的致命错误:stdClass 类的对象无法转换为字符串

报错:使用 maatwebsite 导出到 excel 时,stdClass 类的对象无法转换为字符串

将 stdClass 对象转换/转换为另一个类

如何将 stdClass 对象打印为字符串?