<?php

$url = file_get_contents('https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50');
$json = json_decode($url);

// 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>";

?>
In de json staat toch echt @meta en geen meta..
Als ik $json->@meta->server_timezone gebruik krijg ik een witte pagina, welke mij verteld een php error is.
Tijd om error_reporting en display_errors aan te zetten dan, een witte pagina vertelt jou (en ons ook) niet zoveel...
Misschien werkt dit: $json['@meta']->server_timezone ?
bij
<?php
error_reporting(E_ALL);


$url = file_get_contents('https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50');
$json = json_decode($url);

// 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




bij
<?php
error_reporting(E_ALL);


$url = file_get_contents('https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50');
$json = json_decode($url);

// 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
Probeer het noi eens met $json['@meta'] ..
<?php
error_reporting(E_ALL);

$url = file_get_contents('https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50');
$json = json_decode($url);

// 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).
[/tab]
Dan ben ik wel benieuwd hoe mensen dan die 'meta' moeten uitlezen..
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);

?>

Reageren