php, JSON: объект cURL не редактируется с помощью PHP - PullRequest
1 голос
/ 04 января 2012

Я пытаюсь извлечь объект JSON с другой страницы, а затем разбить его на части и значения для переменных моего php-документа и заполнить ими страницу.

Проблема, с которой я сталкиваюсь, заключается в том, что хотя вызов curl_exec печатает объект JSON, с этого момента я ничего не могу с ним сделать. Ниже мой код:

$json_url = "localhost:8080/query";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_URL, $json_url);
curl_setopt($ch, CURLOPT_USERPWD, $user.":".$pass);  
$result = json_decode(curl_exec($ch));
var_dump ($result);

$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);

curl_close($ch);

// ON SUCCESS

$json_a =  $result[10];
var_dump ($json_a);

Вот пример части результата:

 ["4"]=> array(2) { [0]=> int(1325003843) [1]=> array(2) { [0]=> int(47) [1]=> array(17) { [0]=> array(2) { [0]=> int(0) [1]=> int(1) } [1]=> array(2) { [0]=> int(17) [1]=> int(44) } [2]=> array(2) { [0]=> int(3) [1]=> int(4) } [3]=> array(2) { [0]=> int(3) [1]=> int(4) } [4]=> array(2) { [0]=> int(3) [1]=> int(4) } [5]=> array(2) { [0]=> int(3) [1]=> int(4) } [6]=> array(2) { [0]=> int(3) [1]=> int(4) } [7]=> array(2) { [0]=> int(3) [1]=> int(4) } [8]=> array(2) { [0]=> int(3) [1]=> int(4) } [9]=> array(2) { [0]=> int(3) [1]=> int(4) } [10]=> array(2) { [0]=> int(3) [1]=> int(4) } [11]=> array(2) { [0]=> int(3) [1]=> int(4) } [12]=> array(2) { [0]=> int(3) [1]=> int(4) } [13]=> array(2) { [0]=> int(2) [1]=> int(3) } [14]=> array(2) { [0]=> int(2) [1]=> int(3) } [15]=> array(2) { [0]=> int(2) [1]=> int(3) } [16]=> array(2) { [0]=> int(2) [1]=> int(3) } } } }

var_dump ($ result); возвращает int (1), а другой var_dump возвращает NULL. На самом деле curl_exec печатает объект JSON, поэтому я знаю, что он по крайней мере захватывает его. Большое спасибо за любую помощь, которую вы можете предложить!

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Если для CURLOPT_RETURNTRANSFER установлено значение false, curl_exec возвращает только значение true или false. Установите для CURLOPT_RETURNTRANSFER значение true, и curl_exec должен вернуть вам результат.

1 голос
/ 04 января 2012

Вы также можете просто сделать что-то вроде

$json_url = "localhost:8080/query";
// $protocol should be the protocol used, ie. 'ftp://', 'http://' or 'https://'
//  to produce an URL like 'ftp://user:pass@localhost:8080/query'
$result = file_get_contents($protocol . $user.":".urlencode($pass) . '@' . $json_url);

if($result !== false) { // ON SUCCESS
  $result = json_decode($result, true);
  var_dump ($result);

  if(isset($result[10])) { // If index 10 of $result exists
    $json_a =  $result[10];
    var_dump ($json_a);
  }
} else {
  // error occured
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...