175

I have a URL that returns a JSON object like this:

{
    "expires_in":5180976,
    "access_token":"AQXzQgKTpTSjs-qiBh30aMgm3_Kb53oIf-VA733BpAogVE5jpz3jujU65WJ1XXSvVm1xr2LslGLLCWTNV5Kd_8J1YUx26axkt1E-vsOdvUAgMFH1VJwtclAXdaxRxk5UtmCWeISB6rx6NtvDt7yohnaarpBJjHWMsWYtpNn6nD87n0syud0"
} 

I want to get JSON object from the URL and then the access_token value.

So how can I retrieve it through PHP?

2

11 Answers 11

409
$json = file_get_contents('url_here');
$obj = json_decode($json);
echo $obj->access_token;

For this to work, file_get_contents requires that allow_url_fopen is enabled. This can be done at runtime by including:

ini_set("allow_url_fopen", 1);

You can also use curl to get the URL. To use curl, you can use the example found here:

$ch = curl_init();
// IMPORTANT: the below line is a security risk, read https://paragonie.com/blog/2017/10/certainty-automated-cacert-pem-management-for-php-software
// in most cases, you should set it to true
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'url_here');
$result = curl_exec($ch);
curl_close($ch);

$obj = json_decode($result);
echo $obj->access_token;
12
  • Sorry I forgot to mention that first how do I get this string from the url then access the json object? Commented Mar 25, 2013 at 14:35
  • The error came on this line echo $obj['access_token']; Fatal error: Cannot use object of type stdClass as array in F:\wamp\www\sandbox\linkedin\test.php on line 22 Commented Mar 25, 2013 at 14:39
  • 1
    @user2199343 If you want to use the result as array, use ", true" in json_decode function. See my answer for example.
    – netblognet
    Commented Mar 25, 2013 at 14:41
  • file_get_contents('url'); There is an error referring to this Commented Mar 25, 2013 at 14:53
  • 1
    you can put this line at the top ini_set("allow_url_fopen", 1); to enable allow_url_fopen at runtime.
    – Cԃաԃ
    Commented Jun 15, 2015 at 6:37
28
$url = 'http://.../.../yoururl/...';
$obj = json_decode(file_get_contents($url), true);
echo $obj['access_token'];

PHP also can use properties with dashes:

garex@ustimenko ~/src/ekapusta/deploy $ psysh
Psy Shell v0.4.4 (PHP 5.5.3-1ubuntu2.6 — cli) by Justin Hileman
>>> $q = new stdClass;
=> <stdClass #000000005f2b81c80000000076756fef> {}
>>> $q->{'qwert-y'} = 123
=> 123
>>> var_dump($q);
class stdClass#174 (1) {
  public $qwert-y =>
  int(123)
}
=> null
1
  • 1
    i would prefer this answer on the chosen answer for 1 reason only the parsed json could contain index with dash character ex: {"full-name":"khalil","familiy-name":"whatever"} decoding as array will keep you on the safe side Commented May 14, 2015 at 8:11
22

You could use PHP's json_decode function:

$url = "http://urlToYourJsonFile.com";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "My token: ". $json_data["access_token"];
1
  • Good example but he method is called json_decode not $json_decode.
    – czerasz
    Commented Jun 16, 2014 at 12:33
8
// Get the string from the URL
$json = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452');

// Decode the JSON string into an object
$obj = json_decode($json);

// In the case of this input, do key and array lookups to get the values
var_dump($obj->results[0]->formatted_address);
2
  • 1
    Prefer code block formatting for code, and explanatory comments, especially if the code doesn't specifically answer the question directly (in this case there are different key names etc.)
    – elliot42
    Commented Nov 19, 2015 at 23:21
  • Where has this been copied from? What is the source? It looks like drive by, google the question, and blindly paste the first search result as an answer. Commented Mar 18, 2023 at 14:18
8

You need to read about the json_decode function.

Here you go:

$json = '{"expires_in":5180976,"access_token":"AQXzQgKTpTSjs-qiBh30aMgm3_Kb53oIf-VA733BpAogVE5jpz3jujU65WJ1XXSvVm1xr2LslGLLCWTNV5Kd_8J1YUx26axkt1E-vsOdvUAgMFH1VJwtclAXdaxRxk5UtmCWeISB6rx6NtvDt7yohnaarpBJjHWMsWYtpNn6nD87n0syud0"}';
//OR $json = file_get_contents('http://someurl.dev/...');

$obj = json_decode($json);
var_dump($obj-> access_token);

//OR

$arr = json_decode($json, true);
var_dump($arr['access_token']);
2
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'url_here');
$result = curl_exec($ch);
curl_close($ch);

$obj = json_decode($result);
echo $obj->access_token;
1
  • 3
    Welcome to StackOverflow! This question has already been answered multiple times! Please elaborate on how your answer is different and improves the others, instead of simply dumping some code.
    – T3 H40
    Commented Jan 11, 2016 at 7:50
2

file_get_contents() was not fetching the data from a URL. Then I tried curl and it was working fine.

1

Our solution, adding some validations to response, so we are sure we have a well-formed JSON object in the $json variable:

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
if (! $result) {
    return false;
}

$json = json_decode(utf8_encode($result));
if (empty($json) || json_last_error() !== JSON_ERROR_NONE) {
    return false;
}
1

My solution only works for the following cases:

If you are mistaking a multidimensional array into a single one:

$json = file_get_contents('url_json'); // Get the JSON content
$objhigher=json_decode($json); // Cconverts to an object
$objlower = $objhigher[0]; // If the JSON response is multidimensional, this lowers it
echo "<pre>"; // Box for code
print_r($objlower); // Prints the object with all key and values
echo $objlower->access_token; // Prints the variable
0
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'https://www.xxxSite/get_quote/ajaxGetQuoteJSON.jsp?symbol=IRCTC&series=EQ');
//Set the GET method by giving 0 value and for POST set as 1
//curl_setopt($curl_handle, CURLOPT_POST, 0);
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$query = curl_exec($curl_handle);
$data = json_decode($query, true);
curl_close($curl_handle);

//print complete object, just echo the variable not work so you need to use print_r to show the result
echo print_r( $data);
//at first layer
echo $data["tradedDate"];
//Inside the second layer
echo $data["data"][0]["companyName"];

Some time you might get 405, set the method type correctly.

0

When you are using curl, it sometimes gives you a 403 (access forbidden).

I solved by adding this line to emulate a browser.

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
1
  • how do i get a string from a json array via php?
    – Jay Mee
    Commented Nov 5, 2022 at 23:23

Not the answer you're looking for? Browse other questions tagged or ask your own question.