Davey D
Davey D

Reputation: 460

Can't extract data from Json

I can't extract data from json that I got from an api. I tried for hours, tried all kinds of formats. Read Stackoverflow threads like How do I extract data from JSON with PHP?, but I can't see what I am doing wrong.

This is the code so far:

$api_results = '{"status":"0000","data":{"opening_price":"6998000","closing_price":"7270000","min_price":"6750000","max_price":"7997000","average_price":"7188302.5804","units_traded":"78484.9241002","volume_1day":"78484.9241002","volume_7day":"335611.84181738","buy_price":"7268000","sell_price":"7274000","date":"1510563513031"}}';

$results = json_decode($api_results, true);

// Some variations I tried:
var_dump($results->status[1]);
var_dump($results->data[1]->opening_price);
var_dump($results["data"][1]["opening_price"]);

End result: NULL NULL NULL

What am I doing wrong?

Thanks for the answers! I will upvote the working ones. Seems I got confused in the formating!

Upvotes: 1

Views: 421

Answers (6)

Remove true from json_decode and try something like this:

var_dump($results->status);
var_dump($results->data->opening_price);

If you see {} it is refering to objects and [] indicates that it is an array. You're trying to show everything as if they were arrays

Upvotes: 0

TheDevWay
TheDevWay

Reputation: 1393

You have set the second parameter of json_decode() to true. that means the json will be converted to an array so you are not able to access the data using pointer -> (because it is not an object).

You may access the data like this:

var_dump($results['status'][0]);
var_dump($results['data'][0]['opening_price']);

P.S: Try var_dump($results) to see the exact data, so you know how to access each attribute.

Upvotes: -2

Lomesh Kelwadkar
Lomesh Kelwadkar

Reputation: 110

Use this code like i think work it fine..

<?php
$api_results = '{"status":"0000","data":{"opening_price":"6998000","closing_price":"7270000","min_price":"6750000","max_price":"7997000","average_price":"7188302.5804","units_traded":"78484.9241002","volume_1day":"78484.9241002","volume_7day":"335611.84181738","buy_price":"7268000","sell_price":"7274000","date":"1510563513031"}}';
$results = json_decode($api_results);

print_r($results);
var_dump($results->status);
$var = $results->data;
var_dump($var->opening_price);
?>

stdClass Object
(
    [status] => 0000
    [data] => stdClass Object
        (
            [opening_price] => 6998000
            [closing_price] => 7270000
            [min_price] => 6750000
            [max_price] => 7997000
            [average_price] => 7188302.5804
            [units_traded] => 78484.9241002
            [volume_1day] => 78484.9241002
            [volume_7day] => 335611.84181738
            [buy_price] => 7268000
            [sell_price] => 7274000
            [date] => 1510563513031
        )

)

string(4) "0000"
string(7) "6998000"

Upvotes: 0

axiac
axiac

Reputation: 72226

Have you read the documentation of json_decode() (or, at least, the accepted answer of the question you linked)? If you pass TRUE as the second argument to json_decode() (and there is no decent reason to not pass it) then it decodes the JSON to associative arrays and not objects.

The elements in a PHP array can be accessed using the square bracket syntax.

A simple call to print_r($results) tells its structure:

Array
(
    [status] => 0000
    [data] => Array
        (
            [opening_price] => 6998000
            [closing_price] => 7270000
            [min_price] => 6750000
            [max_price] => 7997000
            [average_price] => 7188302.5804
            [units_traded] => 78484.9241002
            [volume_1day] => 78484.9241002
            [volume_7day] => 335611.84181738
            [buy_price] => 7268000
            [sell_price] => 7274000
            [date] => 1510563513031
        )
)

Now, accessing its items is a piece of cake:

echo($results['status']);
# 0000
echo($results['data']['opening_price']);
# 6998000

Upvotes: 3

M Khalid Junaid
M Khalid Junaid

Reputation: 64476

Remove true from json_decode so you will have object result like Demo

$results = json_decode($api_results);
var_dump($results->status);
var_dump($results->data->opening_price);

When you use json_decode with true the returned objects will be converted into associative arrays.

Upvotes: 2

pr1nc3
pr1nc3

Reputation: 8338

<?php

$api_results = '{"status":"0000","data":{"opening_price":"6998000","closing_price":"7270000","min_price":"6750000","max_price":"7997000","average_price":"7188302.5804","units_traded":"78484.9241002","volume_1day":"78484.9241002","volume_7day":"335611.84181738","buy_price":"7268000","sell_price":"7274000","date":"1510563513031"}}';


$results = json_decode($api_results, true);
print_r($results['status']);
echo "</br>";
print_r($results['data']['opening_price']);

Try access your array that way.

The output is :

0000
6998000

Keep an eye for the nested arrays. You need to access their parent array first in order to get their values.

Upvotes: 6

Related Questions