// Hoe komt het dat dit niet werkt..
echo "Server Time: " . $json->meta->server_timezone . "<br>";
// Terwijl dit wel gewoon werkt?
echo "Title: " . $json->data->movies[0]->date_uploaded_unix . "<br>";
// Hoe komt het dat dit niet werkt..
echo "Server Time: " . $json->@meta->server_timezone . "<br>";
// Terwijl dit wel gewoon werkt?
echo "Title: " . $json->data->movies[0]->date_uploaded_unix . "<br>";
?>
Parse error: syntax error, unexpected '@', expecting T_STRING or T_VARIABLE or '{' or '$' in /xxxx/test.php on line 9
// Hoe komt het dat dit niet werkt..
echo "Server Time: " . $json->meta->server_timezone . "<br>";
// Terwijl dit wel gewoon werkt?
echo "Title: " . $json->data->movies[0]->date_uploaded_unix . "<br>";
?>
notice: Undefined property: stdClass::$meta in /xxx/test.php on line 9
Notice: Trying to get property of non-object in /xxx/test.php on line 9
// Hoe komt het dat dit niet werkt..
echo "Server Time: " . $json['@meta']->server_timezone . "<br>";
// Terwijl dit wel gewoon werkt?
echo "Title: " . $json->data->movies[0]->date_uploaded_unix . "<br>";
?>
Fatal error: Cannot use object of type stdClass as array in /xxx/test.php on line 9
Zoals je op PHP.net kunt lezen, geeft json_decode() standaard een object terug. $a['...'] is een manier om arrays uit te lezen, dit zou dus niet werken met objecten.
Zoals je ook op PHP.net kunt lezen is @ een operator in PHP (een error control operator om precies te zijn).
Dus er zijn 2 methoden om dit op te lossen:
1. Laat json_decode() een array returnen (zoals uitgelegd staat op PHP.net)
2. Zorg dat @ niet wordt herkent als operator, maar onderdeel van de operator. Dit staat beschreven op PHP.net (lekker eentonige links...):
[tab]
Curly braces may also be used, to clearly delimit the property name. They are most useful when accessing values within a property that contains an array, when the property name is made of mulitple parts, or when the property name contains characters that are not otherwise valid (e.g. from json_decode() or SimpleXML).
Gek idee: als je de file_get_contents() gebruikt eerst de @ weghalen voordat je het als JSON laat decoden?
Tenslotte komt het apenstaartje maar 1x voor... je kan hem dus missen en heeft geen enkel nut.
<?php
$url = file_get_contents('https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50');
$url = str_replace("@meta", "meta", $url); // deze regel is nieuw
$json = json_decode($url);
?>