Obtenir un objet JSON à partir de l'URL


146

J'ai une URL qui renvoie un objet JSON comme celui-ci:

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

Je veux obtenir la access_tokenvaleur. Alors, comment puis-je le récupérer via PHP?


1
json_decode($your_string)devrait faire l'affaire
d4rkpr1nc3

Réponses:


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

Pour que cela fonctionne, file_get_contentsnécessite que allow_url_fopensoit activé. Cela peut être fait au moment de l'exécution en incluant:

ini_set("allow_url_fopen", 1);

Vous pouvez également utiliser curlpour obtenir l'URL. Pour utiliser curl, vous pouvez utiliser l'exemple trouvé ici :

$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;

Désolé, j'ai oublié de le mentionner d'abord, comment puis-je obtenir cette chaîne à partir de l'url, puis accéder à l'objet json?
user2199343

L'erreur est survenue sur cette ligne echo $ obj ['access_token']; Erreur fatale: impossible d'utiliser l'objet de type stdClass comme tableau dans F: \ wamp \ www \ sandbox \ linkedin \ test.php à la ligne 22
user2199343

1
@ user2199343 Si vous souhaitez utiliser le résultat comme tableau, utilisez ", true" dans la fonction json_decode. Voir ma réponse par exemple.
netblognet

file_get_contents ('url'); Il y a une erreur faisant référence à ceci
user2199343

1
vous pouvez mettre cette ligne en haut ini_set("allow_url_fopen", 1);pour l'activer allow_url_fopenau moment de l'exécution.
Cԃ ա ԃ

25
$url = 'http://.../.../yoururl/...';
$obj = json_decode(file_get_contents($url), true);
echo $obj['access_token'];

Php peut également utiliser des propriétés avec des tirets:

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
Je préférerais cette réponse sur la réponse choisie pour 1 raison, seul le json analysé pourrait contenir un index avec un tiret ex: {"full-name": "khalil", "familiy-name": "what"} le décodage en tant que tableau gardera vous du bon côté
Khalil Awada

17

Vous pouvez utiliser la fonction json_decode de PHP :

$url = "http://urlToYourJsonFile.com";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "My token: ". $json_data["access_token"];

Bon exemple mais la méthode json_decodene s'appelle pas $json_decode.
czerasz

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);

Préférez le formatage du bloc de code pour le code et les commentaires explicatifs, surtout si le code ne répond pas spécifiquement à la question directement (dans ce cas, il existe différents noms de clé, etc.)
elliot42

7

Vous devez lire sur la fonction json_decode http://php.net/manual/en/function.json-decode.php

Voici

$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']);

3
$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;

2
Bienvenue dans StackOverflow! Cette question a déjà reçu plusieurs réponses! Veuillez expliquer en quoi votre réponse est différente et améliore les autres, au lieu de simplement jeter du code.
T3 H40 du

2

file_get_contents()ne récupère pas les données de l'url, alors j'ai essayé curlet cela fonctionne bien.


1

ma solution ne fonctionne que pour les cas suivants: si vous confondez un tableau multidimensionnel en un seul

$json = file_get_contents('url_json'); //get the json
$objhigher=json_decode($json); //converts to an object
$objlower = $objhigher[0]; // if the json response its 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

je sais que la réponse a déjà été répondue, mais pour ceux qui sont venus ici à la recherche de quelque chose, j'espère que cela pourra vous aider


0

Lorsque vous utilisez curlparfois vous donner 403 (accès interdit) Résolu en ajoutant cette ligne pour émuler le navigateur.

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)');

J'espère que cela aidera quelqu'un.


0

Notre solution, en ajoutant quelques validations à la réponse afin que nous soyons sûrs d'avoir un objet json bien formé dans la variable $ json

$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;
}

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"];

Parfois, vous pourriez obtenir 405, définissez correctement le type de méthode.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.