JSON multi level uitlezen.
ik haal gegevens uit een webservices en deze gegevens wil ik in veriables stoppen. Zoals aangegeven bestaat de JSON uit een 100 tal records die op hun beurt nog een diepte niveau hebben.
Dit zijn 2 voorbeeldlijnen uit de JSON;
[
{
"resource_state": 2,
"athlete": {
"resource_state": 2,
"firstname": "Jason",
"lastname": "G."
},
"name": "los",
"distance": 53101.0,
"moving_time": 6017,
"elapsed_time": 6017,
"total_elevation_gain": 79.0,
"type": "VirtualRide"
},
{
"resource_state": 2,
"athlete": {
"resource_state": 2,
"firstname": "Davy",
"lastname": "C."
},
"name": "Morning Ride",
"distance": 65329.0,
"moving_time": 10829,
"elapsed_time": 11785,
"total_elevation_gain": 401.0,
"type": "Ride",
"workout_type": 10
}
]
ik lees alles uit het eerste level (distance,moving_time,elapsed_time,... ) uit in een variable adh van volgende code
$arr = json_decode($response, true);
foreach ($arr as $row)
{
$distance = ($row['distance']);
$moving_time = ($row['moving_time']);
...}
ik probeer nu de firstname en de lastname in een variable te krijgen en ik krijg de volgende foutmelding;
"Undefined index: firstname in /home/waibe/doma/....."
Heeft iemand enig idee wat hiet fout loopt?
Gewijzigd op 21/12/2020 17:34:14 door Daniel VDM
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// deze functie voorkomt een foutmelding als een element niet bestaat in een array en
// geeft in plaats van een foutmelding dan een default waarde terug.
function saveRead($arr, $key, $default = '<onbekend>')
{
if(isset($arr[$key])) {
return $arr[$key];
}
return $default;
}
$arr = json_decode($response, true);
foreach($arr as $object) {
echo saveRead($object, 'name') . "<br>\n";
echo saveRead($object, 'distance') . "<br>\n";
// athlete is een object in json en in PHP een associative array.
// Voor het gemak plaatsen we deze eerst in een variabele $athlete
$athlete = saveRead($object, 'athlete', array());
// merk op dat we nu $athlete gebruiken in plaats van $object
echo saveRead($athlete, 'firstname') . "<br>\n";
echo saveRead($athlete, 'lastname') . "<br>\n";
}
?>
// deze functie voorkomt een foutmelding als een element niet bestaat in een array en
// geeft in plaats van een foutmelding dan een default waarde terug.
function saveRead($arr, $key, $default = '<onbekend>')
{
if(isset($arr[$key])) {
return $arr[$key];
}
return $default;
}
$arr = json_decode($response, true);
foreach($arr as $object) {
echo saveRead($object, 'name') . "<br>\n";
echo saveRead($object, 'distance') . "<br>\n";
// athlete is een object in json en in PHP een associative array.
// Voor het gemak plaatsen we deze eerst in een variabele $athlete
$athlete = saveRead($object, 'athlete', array());
// merk op dat we nu $athlete gebruiken in plaats van $object
echo saveRead($athlete, 'firstname') . "<br>\n";
echo saveRead($athlete, 'lastname') . "<br>\n";
}
?>
Gewijzigd op 21/12/2020 16:33:03 door Frank Nietbelangrijk
Super oplossing !! Hartelijk dank Frank, zo werkt dit uitstekend en ik had mij al gek gezocht en nergens een goede oplossing gevonden.