2013-03-25 21 views
91

Ho un URL che restituisce un oggetto JSON come questo:Ottenere oggetto JSON da URL

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

voglio ottenere il valore access_token. Quindi, come posso recuperarlo tramite PHP?

+1

'json_decode ($ your_string)' dovrebbe fare il trucco – d4rkpr1nc3

+0

Date un'occhiata al http://stackoverflow.com/questions/4343596/parsing-json-file-with-php – ophintor

risposta

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

Per far funzionare tutto questo, file_get_contents richiede che allow_url_fopen è abilitato. Questo può essere fatto in fase di esecuzione, includendo:

ini_set("allow_url_fopen", 1); 

È inoltre possibile utilizzare curl per ottenere l'url. Per usare curl, è possibile utilizzare l'esempio trovato here:

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

Scusa se ho dimenticato di dire che prima come si fa Ottengo questa stringa dall'url quindi accedere all'oggetto json? – user2199343

+0

L'errore si è verificato su questa riga echo $ obj ['access_token']; Errore irreversibile: impossibile utilizzare l'oggetto di tipo stdClass come matrice in F: \ wamp \ www \ sandbox \ linkedin \ test.php nella riga 22 – user2199343

+1

@ user2199343 il mio errore. vedi la mia modifica. – Prisoner

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

PHP può anche utilizzare le proprietà con i trattini:

[email protected] ~/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

preferirei questa risposta sulla risposta scelta per 1 motivo solo il json analizzato potrebbe contenere indice con carattere trattino es: {"nome completo": "khalil", "familiy-name": "qualunque"} decodifica come array ti terrà al sicuro –

+1

Khalil, nope)) – gaRex

+0

spiega più plz –

10

È possibile utilizzare la funzione di PHP json_decode:

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

Un buon esempio, ma il metodo è chiamato 'json_decode' non' $ json_decode'. – czerasz

5

È necessario leggere la funzione json_decode http://php.net/manual/en/function.json-decode.php

Qui si va

$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']); 
4
// 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); 
+0

Preferisci la formattazione del blocco di codice per il codice e commenti esplicativi, soprattutto se il codice non risponde in modo specifico alla domanda direttamente (in questo caso ci sono nomi di chiavi diversi ecc.) – elliot42

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; 
+2

Benvenuti in StackOverflow! Questa domanda ha già avuto risposta più volte! Per favore, spiega come la tua risposta è diversa e migliora gli altri, invece di scaricare semplicemente del codice. –

1

file_get_contents() non è andare a prendere i dati da URL, quindi ho provato curl e che sta funzionando benissimo.