Nhận đối tượng JSON từ URL


146

Tôi có một URL trả về một đối tượng JSON như thế này:

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

Tôi muốn nhận được access_tokengiá trị. Vậy làm thế nào tôi có thể lấy nó thông qua PHP?


1
json_decode($your_string)nên thực hiện thủ thuật
d4rkpr1nc3 25/03/13

Câu trả lời:


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

Để làm việc này, file_get_contentsyêu cầu allow_url_fopenđược kích hoạt. Điều này có thể được thực hiện trong thời gian chạy bằng cách bao gồm:

ini_set("allow_url_fopen", 1);

Bạn cũng có thể sử dụng curlđể lấy url. Để sử dụng curl, bạn có thể sử dụng ví dụ được tìm thấy ở đây :

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

Xin lỗi tôi đã quên đề cập rằng đầu tiên làm thế nào để tôi có được chuỗi này từ url sau đó truy cập vào đối tượng json?
dùng2199343

Lỗi xảy ra trên dòng này echo $ obj ['access_token']; Lỗi nghiêm trọng: Không thể sử dụng đối tượng của loại stdClass làm mảng trong F: \ wamp \ www \ sandbox \ linkin \ test.php trên dòng 22
user2199343

1
@ user2199343 Nếu bạn muốn sử dụng kết quả dưới dạng mảng, hãy sử dụng ", true" trong hàm json_decode. Xem câu trả lời của tôi chẳng hạn.
netblognet

file_get_contents ('url'); Có một lỗi liên quan đến điều này
user2199343

1
bạn có thể đặt dòng này ở trên cùng ini_set("allow_url_fopen", 1);để kích hoạt allow_url_fopentrong thời gian chạy.
Cԃ ա

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

Php cũng có thể sử dụng các thuộc tính với dấu gạch ngang:

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
Tôi thích câu trả lời này cho câu trả lời được chọn vì 1 lý do chỉ json được phân tích cú pháp có thể chứa chỉ mục với ký tự gạch ngang ex: {"tên đầy đủ": "khalil", "familiy-name": "anything"} giải mã như mảng sẽ giữ bạn về phía an toàn
Khalil Awada

17

Bạn có thể sử dụng hàm json_decode của PHP :

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

Ví dụ tốt nhưng ông phương pháp được gọi là json_decodekhông $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);

Thích định dạng khối mã cho mã và nhận xét giải thích, đặc biệt nếu mã không trả lời cụ thể câu hỏi trực tiếp (trong trường hợp này có các tên khóa khác nhau, v.v.)
elliot42

7

Bạn cần đọc về hàm json_decode http://php.net/manual/en/feft.json-decode.php

Bạn đi đây

$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
Chào mừng bạn đến với StackOverflow! Câu hỏi này đã được trả lời nhiều lần! Vui lòng giải thích cách câu trả lời của bạn khác biệt và cải thiện những câu hỏi khác, thay vì chỉ đơn giản là bỏ một số mã.
T3 H40

2

file_get_contents()không tìm nạp dữ liệu từ url, sau đó tôi đã thử curlvà nó hoạt động tốt.


1

giải pháp của tôi chỉ hoạt động cho các trường hợp tiếp theo: nếu bạn nhầm một mảng đa mẫu thành một mảng duy nhất

$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

Tôi biết rằng câu trả lời đã được trả lời nhưng với những người đến đây để tìm kiếm thứ gì đó tôi hy vọng điều này có thể giúp bạn


0

Khi bạn đang sử dụng curlđôi khi cung cấp cho bạn 403 (cấm truy cập) Được giải quyết bằng cách thêm dòng này để mô phỏng trình duyệt.

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

Hy vọng điều này sẽ giúp ai đó.


0

Giải pháp của chúng tôi, thêm một số xác nhận để phản hồi để chúng tôi chắc chắn rằng chúng tôi có một đối tượng json được hình thành tốt trong biến $ 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"];

Đôi khi bạn có thể nhận được 405, đặt loại phương thức chính xác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.