JSON multi level uitlezen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel VDM

Daniel VDM

21/12/2020 15:22:24
Quote Anchor link
Hallo
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
 
PHP hulp

PHP hulp

18/12/2024 06:31:19
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/12/2020 16:23:55
Quote Anchor link
Als je de JSON goed bestudeert dan zie dat firstname en lastname onderdeel zijn van het json-object athlete.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";
}

?>
Gewijzigd op 21/12/2020 16:33:03 door Frank Nietbelangrijk
 
Daniel VDM

Daniel VDM

21/12/2020 17:19:59
Quote Anchor link
Super oplossing !! Hartelijk dank Frank, zo werkt dit uitstekend en ik had mij al gek gezocht en nergens een goede oplossing gevonden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.