2012-01-04 89 views
1

我想从另一个页面拉出一个JSON对象,然后将它分解成片段和值给我的php文档的变量并用它们填充页面。php,JSON:cURL对象不能用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($结果);返回int(1),另一个var_dump返回NULL。 curl_exec实际上是打印JSON对象,所以我知道它至少可以抓住它。非常感谢您提供的任何帮助!

回答

1

你也可以只像做

$json_url = "localhost:8080/query"; 
// $protocol should be the protocol used, ie. 'ftp://', 'http://' or 'https://' 
// to produce an URL like 'ftp://user:[email protected]: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 
} 
换句话说
+0

非常感谢!这会取代上面的整个代码段?另外,$协议是什么?非常感谢,让我知道如果你需要我的任何其他信息! – prosborne 2012-01-04 18:38:25

+0

那么,取决于你的'$ json_url'包含的内容。如果你可以在上面的代码中加入var_dumps,我会相应地更新我的答案。 – Flygenring 2012-01-04 18:42:03

+0

好吧,我更新了问题,然后还添加了部分结果。这是一个非常巨大的对象,所以包括整个事情将很难...... – prosborne 2012-01-04 18:51:37

3

将CURLOPT_RETURNTRANSFER设置为false,curl_exec只返回true或false。 将CURLOPT_RETURNTRANSFER设置为true,并且curl_exec应该为您返回结果。

+0

,如果returntransfer是假的,卷曲将输出结果到客户端,而不是将其返回到脚本。 – 2012-01-04 18:23:08

+0

好的,非常感谢!现在,当我解码$ ch时,第一个var_dump会打印“array(2)..”,然后将JSON对象作为数组打印。但我的第二个var_dump仍显示为空。 – prosborne 2012-01-04 18:30:20

+0

你可以发布第一个var_dump的输出吗?看起来像'$ result'是一个只有两个项目的数组,所以引用索引可能应该返回null? – Flygenring 2012-01-04 18:36:40