skip to Main Content

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

2

Answers


  1. 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;
    
    }
    
    Login or Signup to reply.
  2. 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
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search