以下错误显示以下错误:
未定义的属性:stdClass :: $ C :: \ wamp \ www \ temp \ yy.php中的持续时间
尝试在C:\ wamp \ www \ temp \ yy.php中获取非对象的属性
如何解决?
$q = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$a,$b&destinations=$c,$d&mode=driving&sensor=false";
$json = file_get_contents($q);
$details = json_decode($json);
$d=$details->rows[0]->elements[0]->duration->text;
答案 0 :(得分:1)
您可以尝试这样的事情:
if($details->rows[0]->elements[0]->status == 'OK') {
$text = $details->rows[0]->elements[0]->duration->text;
}
如果没有返回任何结果,那么您可能会关注$details->rows[0]->elements[0]
:
stdClass Object
(
[status] => ZERO_RESULTS
)
如果返回了结果,那么您将得到类似$details->rows[0]->elements[0]
的内容:
stdClass Object
(
[distance] => stdClass Object
(
[text] => 1Â 716 km
[value] => 1715523
)
[duration] => stdClass Object
(
[text] => 3 jours 19 heures
[value] => 329133
)
[status] => OK
)
因此,如果$details->rows[0]->elements[0]->status
为OK
,则会有distance
和duration
属性,每个属性都包含stdClass
个对象,其中包含两个属性{ {1}}和text
。确保您在变量中传递了正确的数据(value
,$a
,$b
和$c
)。
试试这个例子:
答案 1 :(得分:0)
您收到的错误消息正在告诉您具体问题。 duration
返回的对象上找不到json_decode
属性;您在引用的代码块中进行的上述查询(即this one)将返回以下JSON:
{
"destination_addresses" : [ "Catamarca Province, Argentina" ],
"origin_addresses" : [ "Augsburg, Germany" ],
"rows" : [
{
"elements" : [
{
"status" : "ZERO_RESULTS"
}
]
}
],
"status" : "OK"
}
看看这个,上面没有返回duration
元素,因此接下来的调用:
$json = file_get_contents($q);
$details = json_decode($json);
$d=$details->rows[0]->elements[0]->duration->text;
会导致您看到错误。
您可以使用错误处理(例如try...catch
)来获取持续时间和文本(如果存在),或者测试该属性是否存在等等。
基本上,它归结为没有额外的代码,你不能依赖duration
将成为返回JSON
的元素的事实,你必须考虑到它