JSON-Objekt von URL abrufen

146

Ich habe eine URL, die ein JSON-Objekt wie folgt zurückgibt:

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

Ich möchte den access_tokenWert erhalten. Wie kann ich es über PHP abrufen?

user2199343
quelle
1
json_decode($your_string)sollte den Trick machen
d4rkpr1nc3
Werfen
ophintor

Antworten:

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

Damit dies funktioniert, file_get_contentsmuss allow_url_fopenes aktiviert sein. Dies kann zur Laufzeit erfolgen, indem Folgendes eingeschlossen wird:

ini_set("allow_url_fopen", 1);

Sie können auch verwenden curl, um die URL zu erhalten. So verwenden curl, können Sie das Beispiel verwenden Sie hier :

$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;
Häftling
quelle
Entschuldigung, ich habe vergessen zu erwähnen, dass ich zuerst diesen String von der URL bekomme und dann auf das JSON-Objekt zugreife.
user2199343
Der Fehler trat in dieser Zeile auf echo $ obj ['access_token']; Schwerwiegender Fehler: Objekt vom Typ stdClass kann nicht als Array in F: \ wamp \ www \ sandbox \ linkedin \ test.php in Zeile 22
user2199343
1
@ user2199343 Wenn Sie das Ergebnis als Array verwenden möchten, verwenden Sie ", true" in der Funktion json_decode. Siehe meine Antwort zum Beispiel.
Netblognet
file_get_contents ('url'); Es gibt einen Fehler, der sich darauf bezieht
user2199343
1
Sie können diese Zeile oben ini_set("allow_url_fopen", 1);einfügen, um sie allow_url_fopenzur Laufzeit zu aktivieren .
Cԃ ա ԃ
25
$url = 'http://.../.../yoururl/...';
$obj = json_decode(file_get_contents($url), true);
echo $obj['access_token'];

PHP kann auch Eigenschaften mit Bindestrichen verwenden:

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
gaRex
quelle
1
Ich würde diese Antwort auf die gewählte Antwort aus einem Grund bevorzugen, nur der analysierte JSON könnte einen Index mit einem Bindestrich enthalten, z Sie auf der sicheren Seite
Khalil Awada
17

Sie können die json_decode- Funktion von PHP verwenden :

$url = "http://urlToYourJsonFile.com";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "My token: ". $json_data["access_token"];
netblognet
quelle
Gutes Beispiel, aber die Methode heißt json_decodenicht $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);
Toqeer Ahmed
quelle
Bevorzugen Sie die Formatierung von Codeblöcken für Code und erläuternde Kommentare, insbesondere wenn der Code die Frage nicht direkt beantwortet (in diesem Fall gibt es unterschiedliche Schlüsselnamen usw.)
elliot42
7

Sie müssen über die json_decode-Funktion http://php.net/manual/en/function.json-decode.php lesen

Bitte schön

$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']);
Nick
quelle
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;
Ya-Ze Lin
quelle
2
Willkommen bei StackOverflow! Diese Frage wurde bereits mehrfach beantwortet! Bitte erläutern Sie, wie sich Ihre Antwort unterscheidet und die anderen verbessert, anstatt einfach Code auszugeben.
T3 H40
2

file_get_contents()holt die Daten nicht von der URL, dann habe ich es versucht curlund es funktioniert gut.

Firdous bhat
quelle
1

Meine Lösung funktioniert nur für die nächsten Fälle: Wenn Sie ein mehrdimensionales Array in ein einziges verwechseln

$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

Ich weiß, dass die Antwort bereits beantwortet wurde, aber für diejenigen, die hierher kamen und nach etwas suchten, hoffe ich, dass dies Ihnen helfen kann

Billy Mainor Lemus
quelle
0

Wenn Sie verwenden, curlgeben Sie manchmal 403 (Zugriff verboten) Gelöst durch Hinzufügen dieser Zeile, um den Browser zu emulieren.

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

Hoffe das hilft jemandem.

Jamal Arradi
quelle
0

Unsere Lösung besteht darin, der Antwort einige Validierungen hinzuzufügen, damit wir sicher sind, dass wir ein wohlgeformtes json-Objekt in der Variablen $ json haben

$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;
}
Raul Sanchez
quelle
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"];

Wenn Sie 405 erhalten, stellen Sie den Methodentyp richtig ein.

YB Idee
quelle