2012-11-17 156 views
2

我是JSON的新手,在檢查出現錯誤時收到錯誤消息時遇到問題。當結果不是錯誤時,我的代碼工作正常,所以我確實有點理解我在做什麼。
這是我試圖解析錯誤JSON:返回NULL的JSON元素

​​

這裏是我的代碼失敗:

$jsonurl = "http://graph.facebook.com/JubilationDanceMinistry"; 
//valid $jsonurl = "http://graph.facebook.com/WhitworthACM"; 
$json = file_get_contents($jsonurl,0,null,null); 
$json_output = json_decode($json); 

var_dump($json_output); 
// This returns NULL 


if (property_exists($json_output->error)) { 
     echo "<p>error: $json_output->error->{'message'} </p>"; 
    } else { 
     echo "<p>no error :(</p>"; 
} 

$facebook_id = $json_output->{'id'}; 
$facebook_name = $json_output->{'name'}; 
$facebook_link = $json_output->{'link'}; 
+0

爲什麼定義2nd(無效)和3rd(默認)參數? –

+0

我不太確定。我是JSON的新手。這只是我發現從URL解析JSON的代碼,它適用於有效的URL。你會建議我把它改成別的東西嗎? – michaellindahl

回答

1

因爲URL返回400 Bad Request

默認情況下,當http狀態碼爲400時,不能使用file_get_contents函數獲取響應內容。

您需要將ignore_errors選項設置爲true

$opts = array(
    'http'=>array(
    'ignore_errors' => true 
) 
); 
$context = stream_context_create($opts); 
$jsonurl = "http://graph.facebook.com/JubilationDanceMinistry"; 
$json = file_get_contents($jsonurl, false, $context); 
var_dump($json); 
+0

但它不是一個無效的URL。它涉及到http://facebook.com/JubilationDanceMinistry(錯誤是基於隱私)您可以訪問http://graph.facebook.com/JubilationDanceMinistry – michaellindahl

+0

@michaellindahl好吧,不管網址是什麼,問題是http響應狀態,你需要得到錯誤信息,對不對? – xdazz

+0

不完全。沒有http錯誤,因爲總會有一個JSON對象。我想獲得「不支持的獲取請求」。來自http://graph.facebook.com/JubilationDanceMinistry的JSON。我想如果在JSON中存在元素錯誤,請回顯消息。 – michaellindahl

0

你不能鏈的多個->的用繩子插值。

你必須訴諸傳遞多個參數來echo或字符串連接:

echo "<p>error: ", $json_output->error->{'message'}, " </p>"; 
+0

錯誤發生在代碼甚至達到這一點之前。當它返回NULL時,錯誤發生在第5行之前。但是,這段代碼更好:'$ json_error = $ json_output-> error; \t $ json_message = $ json_error-> message; \t echo「

JSON消息:」。$ json_message。「

';' – michaellindahl