类 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 的对象无法转换为字符串错误的主要内容,如果未能解决你的问题,请参考以下文章
SQL 错误可捕获的致命错误:stdClass 类的对象无法转换为字符串
WordPress:可捕获的致命错误:stdClass 类的对象无法转换为字符串