Json_decode probleem....
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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>";
?>
$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>";
?>
Gewijzigd op 15/08/2015 14:30:59 door Marco van Bommel
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 ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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>";
?>
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>";
?>
Quote:
Parse error: syntax error, unexpected '@', expecting T_STRING or T_VARIABLE or '{' or '$' in /xxxx/test.php on line 9
bij
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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>";
?>
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>";
?>
Quote:
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
Notice: Trying to get property of non-object in /xxx/test.php on line 9
Gewijzigd op 15/08/2015 17:12:02 door Marco van Bommel
Probeer het noi eens met $json['@meta'] ..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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>";
?>
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>";
?>
Quote:
Fatal error: Cannot use object of type stdClass as array in /xxx/test.php on line 9
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...):
Zoals je op 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...):
Quote:
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).
Gewijzigd op 15/08/2015 18:19:54 door Wouter J
Dan ben ik wel benieuwd hoe mensen dan die 'meta' moeten uitlezen..
Tenslotte komt het apenstaartje maar 1x voor... je kan hem dus missen en heeft geen enkel nut.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?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);
?>
$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);
?>
Gewijzigd op 16/08/2015 17:27:21 door Eddy E
Haahah goed idee van je man, ik had er weer eens niet aan gedacht.. :p
JSON omzetten in een array lijkt mij prima?
Eddy E op 16/08/2015 17:24:42:
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.
Tenslotte komt het apenstaartje maar 1x voor... je kan hem dus missen en heeft geen enkel nut.
Ik zou de links die Wouter aangeeft eens doornemen. Je ziet dan dat je geen @ hoeft te verwijderen en gewoon dit kunt doen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$url = 'https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50';
$json = file_get_contents($url);
$data = json_decode($json);
var_dump($data->{'@meta'});
?>
$url = 'https://yts.to/api/v2/list_movies.json?sort_by=date_added&limit=50';
$json = file_get_contents($url);
$data = json_decode($json);
var_dump($data->{'@meta'});
?>
Edit:
Er zit blijkbaar een bug in het forum. Als je code niet met een ?> afsluit, wordt [ /code ] (zonder de spaties) weergegeven
Gewijzigd op 16/08/2015 19:27:09 door Martin -