2012-05-03 436 views
0

我將一個參數解析爲一個php文件並嘗試使用file_get_contents()獲取json。 這是我的代碼:無法使用file_get_contents()以正確的格式獲取json

< ?php 
    $url = $_GET['url']; 
    $url = urldecode($url); 
    $json = file_get_contents($url, true); 
    echo($json); 
? > 

這就是所謂的網址: http://vimeo.com/api/v2/channel/photographyschool/videos.json

這是我的結果的一部分:

[{"id":40573637,"title":"All For Nothing - \"Dead To Me\" & \"Twisted Tongues\""}] 

等等......所以一切都逃脫。結果中甚至有\ n。

因爲我neet與json(在js)後工作,我需要一個非轉義版本!

有趣的事情是,我的代碼工作,例如用如下JSON: http://xkcd.com/847/info.0.json

什麼是我的問題嗎?

+0

一切都沒有轉義,這裏引號字符串的引號正確地轉義了。 –

+0

'json_decode()'爲我正確解碼該JSON文件,沒有問題。 –

+0

但我如何得到json echo'd,以便我可以讀取php的結果作爲json? –

回答

1

如果你只是想代理/轉發的響應,那麼只不過是迴應它,因爲它是正確的Content-Type標頭:

<?php 
    header('Content-Type: application/json'); 
    $json = file_get_contents('http://vimeo.com/api/v2/channel/photographyschool/videos.json'); 
    echo $json; 
?> 

你必須非常小心的通過網址,因爲它可能會導致XSS!

而且由於API速度慢/資源飢餓,您應該緩存結果或至少將其保存在會話中,以便在每次頁面加載時不重複。

<?php 
$cache = './vimeoCache.json'; 
$url = 'http://vimeo.com/api/v2/channel/photographyschool/videos.json'; 

//Set the correct header 
header('Content-Type: application/json'); 

// If a cache file exists, and it is newer than 1 hour, use it 
if(file_exists($cache) && filemtime($cache) > time() - 60*60){ 
    echo file_get_contents($cache); 
}else{ 
    //Grab content and overwrite cache file 
    $jsonData = file_get_contents($url); 
    file_put_contents($cache,$jsonData); 
    echo $jsonData; 
} 
?> 
+0

有沒有辦法只是以正確的json格式「回顯」json,以便我的php只是打印出vimeo json所提供的內容? –

+0

您的意思是? '$ json = file_get_contents(...); echo $ json;' – nickb

+1

我添加了正確的頭文件,檢查更新。 –

1

使用此:

echo json_decode($json); 

編輯:忘了上面。嘗試添加:

header('Content-Type: text/plain'); 

上述

$url = $_GET['url']; 

,看看有沒有什麼幫助。

+0

不起作用,我現在只是得到「Array」作爲結果 –

+0

@PhilippSiegfried是的,'json_decode'會將JSON變成一個PHP數組。你如何解析JS中的JSON? – honyovk

+0

我希望將PHP作爲某種代理來防止跨站點腳本編寫問題,當我從不同的機器執行ajax調用時! –

0

更好的是,在這裏您提供您的JSON使用:

json_encode(array(
    "id" => 40573637, 
    "title" => 'All For Nothing - "Dead To Me" & "Twisted Tongues"' 
)); 
相關問題