Dapatkan objek JSON dari URL

146

Saya memiliki URL yang mengembalikan objek JSON seperti ini:

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

Saya ingin mendapatkan access_tokennilainya. Jadi bagaimana saya bisa mengambilnya melalui PHP?

pengguna2199343
sumber
1
json_decode($your_string)harus melakukan trik
d4rkpr1nc3

Jawaban:

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

Agar ini berfungsi, file_get_contentsdiperlukan yang allow_url_fopendiaktifkan. Ini dapat dilakukan saat runtime dengan memasukkan:

ini_set("allow_url_fopen", 1);

Anda juga dapat menggunakan curluntuk mendapatkan url. Untuk menggunakan ikal, Anda dapat menggunakan contoh yang ditemukan di sini :

$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;
Tawanan
sumber
Maaf saya lupa menyebutkan bahwa pertama-tama bagaimana cara mendapatkan string ini dari url kemudian mengakses objek json?
user2199343
Kesalahan muncul pada baris ini echo $ obj ['access_token']; Kesalahan fatal: Tidak dapat menggunakan objek tipe stdClass sebagai array di F: \ wamp \ www \ sandbox \ linkedin \ test.php on line 22
user2199343
1
@ user2199343 Jika Anda ingin menggunakan hasilnya sebagai array, gunakan ", true" dalam fungsi json_decode. Lihat jawaban saya misalnya.
netblognet
file_get_contents ('url'); Ada kesalahan terkait ini
user2199343
1
Anda dapat meletakkan baris ini di bagian atas ini_set("allow_url_fopen", 1);untuk mengaktifkan allow_url_fopensaat runtime.
Cԃ ա ԃ
25
$url = 'http://.../.../yoururl/...';
$obj = json_decode(file_get_contents($url), true);
echo $obj['access_token'];

Php juga dapat menggunakan properti dengan tanda hubung:

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
sumber
1
saya lebih suka jawaban ini pada jawaban yang dipilih karena 1 alasan hanya json yang diuraikan dapat berisi indeks dengan karakter tanda hubung ex: {"nama lengkap": "khalil", "nama keluarga": "apa pun"} decoding sebagai array yang akan disimpan Anda di sisi yang aman
Khalil Awada
17

Anda bisa menggunakan fungsi json_decode PHP :

$url = "http://urlToYourJsonFile.com";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "My token: ". $json_data["access_token"];
netblognet
sumber
Contoh yang bagus tapi metodenya disebut json_decodetidak $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
sumber
Lebih suka memformat blok kode untuk kode, dan komentar penjelasan, terutama jika kode tidak secara khusus menjawab pertanyaan secara langsung (dalam hal ini ada nama kunci yang berbeda, dll.)
elliot42
7

Anda perlu membaca tentang fungsi json_decode http://php.net/manual/en/function.json-decode.php

Ini dia

$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
sumber
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
sumber
2
Selamat datang di StackOverflow! Pertanyaan ini sudah dijawab beberapa kali! Tolong jelaskan bagaimana jawaban Anda berbeda dan meningkatkan yang lain, bukan hanya membuang beberapa kode.
T3 H40
2

file_get_contents()tidak mengambil data dari url, lalu saya mencoba curldan berfungsi dengan baik.

Bhat Firdous
sumber
1

solusi saya hanya bekerja untuk kasus-kasus berikutnya: jika Anda salah mengira array multidimensaional menjadi satu

$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

Saya tahu bahwa jawabannya sudah dijawab tetapi bagi mereka yang datang ke sini mencari sesuatu, saya harap ini dapat membantu Anda

Billy Mainor Lemus
sumber
0

Ketika Anda menggunakan curlkadang - kadang memberi Anda 403 (dilarang akses) Dipecahkan dengan menambahkan baris ini untuk meniru 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)');

Semoga ini bisa membantu seseorang.

jamal arradi
sumber
0

Solusi kami, menambahkan beberapa validasi ke respons sehingga kami yakin kami memiliki objek json yang terbentuk dengan baik dalam variabel $ 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;
}
Raul Sanchez
sumber
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"];

Beberapa waktu Anda mungkin mendapatkan 405, atur jenis metode dengan benar.

Ide YB
sumber