Reputation:
When I am trying to echo the JSON objects from the array it is not working. In the error logs it gives me this:
PHP Notice: Trying to get property of non-object in /home/zadmin/test.britishweb.co.uk/patchwork/featuredseries.php on line 48
For every one of the objects I'm trying to echo. Here is my code:
<?php
$source = "http://prod.cloud.rockstargames.com/global/SC/events/eventschedule-game-en.json"; // Source URL will be unchanged most likely but placed in a variable just in case.
$ch = curl_init(); // Connect
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);
$destination = "eventschedule-game-en.json";
$file = fopen($destination, "w+");
file_put_contents($destination, $data);
fclose($file);
$json = file_get_contents($destination);
$obj = json_decode($json, true);
var_dump($obj); // Debug option
?>
Var dump of $obj
:
{
"multiplayerEvents": [
{
"posixStartTime": 1498687200,
"posixEndTime": 1499720340,
"eventRosGameTypes": [
"gta5"
],
"eventPlatformTypes": [
"pcros",
"xboxone",
"ps4"
],
"displayName": "2x$ and RP Dawn Raid Adversary Mode",
"eventId": 20417,
"extraData": {
"eventType": "FeaturedJob"
}
}
]
}
and then I am doing the HTML as such:
<div class="main_event">
<p id="name"><?php echo $obj["displayName"]; ?> Now playing on GTA V.</p>
<h2>Selected Platforms</h2>
<p id="platforms">The series is currently running on the following platforms:</p>
<ul>
<li><?php echo $obj->eventPlatformTypes[0]; ?></li>
<li><?php echo $obj->eventPlatformTypes[1]; ?></li>
<li><?php echo $obj->eventPlatformTypes[2]; ?></li>
</ul>
</div>
Upvotes: 0
Views: 92
Reputation: 22911
You're attempting to access $obj
as an object and not an array. The fact that you're passing true to the second parameter of json_decode()
, tells you that the object returned is an array and not an object. Access properties using the same way you accessed them on this line:
<p id="name"><?php echo $obj["displayName"]; ?> Now playing on GTA V.</p>
Also, be aware there is no "displayName" on $obj
. It's a part of the multiplayerEvents array. So, access your $obj
array like so:
<div class="main_event">
<p id="name"><?php echo $obj["multiplayerEvents"][0]["displayName"]; ?> Now playing on GTA V.</p>
<h2>Selected Platforms</h2>
<p id="platforms">The series is currently running on the following platforms:</p>
<ul>
<li><?php echo $obj["multiplayerEvents"][0]["eventPlatformTypes"][0]; ?></li>
<li><?php echo $obj["multiplayerEvents"][0]["eventPlatformTypes"][1]; ?></li>
<li><?php echo $obj["multiplayerEvents"][0]["eventPlatformTypes"][2]; ?></li>
</ul>
</div>
One other slight note. You may want to iterate through your eventPlatformTypes, (And maybe even your multiplerEvents as well) in case there are a variable number of types/events:
<ul>
<?php foreach ( $obj["multiplayerEvents"][0]["eventPlatformTypes"] as $platformType ): ?>
<li><?php echo $platformType; ?></li>
<?php endforeach; ?>
</ul>
Upvotes: 2