Home > Software engineering >  How do i access data from an array with json data in PHP
How do i access data from an array with json data in PHP

Time:01-08

Hi guys i have been working with an api and they return a response like this. I am really confused on here cause i have tried accessing it like any other json data but it's returning an attempt to read error

[ { "service": 1, "name": "Followers", "type": "Default", "category": "First Category", "rate": "0.90", "min": "50", "max": "10000", "refill": true, "cancel": true }, { "service": 2, "name": "Comments", "type": "Custom Comments", "category": "Second Category", "rate": "8", "min": "10", "max": "1500", "refill": false, "cancel": true } ]

this is my api request

$api_key = "myapikey"; $link = "httpsaddresshere";

$params = [
    'key' => $api_key,
    'action' => 'services'
];

$url = curl_init($link);
curl_setopt($url, CURLOPT_RETURNTRANSFER, true);
curl_setopt($url, CURLOPT_POST, 1);
curl_setopt($url, CURLOPT_POSTFIELDS, $params);

$exec = curl_exec($url);
$result = json_decode($exec);

echo $result->name;

Api is working fine i am seeing result when i use var_dump; but it returns an error trying to access the data

CodePudding user response:

You can use

$result = json_decode($exec, true)

and the can access the array values by their key name like

$result[0]['service']
//shall out put followers

CodePudding user response:

This is because the JSON returned is an array of objects. Thus, while passing it into json_decode you would get the array of objects:

Doing this: print_r($result); would produce an output like:

Array
(
    [0] => stdClass Object
        (
            [service] => 1
            [name] => Followers
            [type] => Default
            [category] => First Category
            [rate] => 0.90
            [min] => 50
            [max] => 10000
            [refill] => 1
            [cancel] => 1
        )

    [1] => stdClass Object
        (
            [service] => 2
            [name] => Comments
            [type] => Custom Comments
            [category] => Second Category
            [rate] => 8
            [min] => 10
            [max] => 1500
            [refill] => 
            [cancel] => 1
        )

)

Thus to access it you should replace:

$result->name with $result{0}->name

Or better if:

$result = json_decode($exec, true);

Would convert it into an array, thus access it as:

$result[0]['name'];

Just iterate on the result and get the response:

foreach($result as $res){
   
   //if result is array
   echo $res['name'];

   //if result is object
   echo $res->name;

}
  • Related