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?


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;

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

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

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

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

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
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.


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


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.


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.