2014-12-02 123 views
2

遇到問題。PHP API將JSON保存到文件,然後讀取文件

基本上,我試圖訪問一個API來檢索數據。我只限於一定數量的連接,所以我的計劃是檢索數據,將其保存到我的主機上的文本文件中,然後從該文件中儘可能多地讀取。然後,我會使用cron作業每隔幾個小時用新數據重新填充文件。

無論如何,我已經登錄到API並且檢索了數據,並且可以顯示沒有問題的「live」數據。

嘗試保存數據並從文本文件中讀取時出現故障。這是一個多深度數組。

的retreiving代碼

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_URL, 'URL GOES HERE'); 
//prepare the field values being posted to the service 
$data = array("appkey" => "KEY","account" => "ACCOUNT"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

//make the request 
$result = curl_exec($ch); 
curl_close($ch); 

這得到代碼罰款,我可以顯示

$properties = json_decode($result, true); 
$properties = $properties['properties']; 
//pr($parsed_json); 

foreach($properties as $key => $value) { 

    if ($_GET[section] == "sale") { 

     if ($value['category_id'] == "1") { 

      displayProp ($address, $value['price'], $value['qualifier_name'], $value['summary']); 

     } 

    } elseif ($_GET[section] == "rent") { 

     if ($value['category_id'] == "2") { 

      displayProp ($address, $value['price'], $value['freq_name'], $value['summary']); 

     } 
    } 
} 

和工作原理。

我再嘗試和JSON保存到一個文本文件

file_put_contents('properties.txt', json_decode($result)); 

這將文件保存好數據。但是當試圖從中讀取時,無論我嘗試什麼,我都會得到隨機錯誤。有人可以幫助閱讀文本文件並輸出數組嗎?

隨着JSONLint我驗證數據,並得到以下錯誤

Parse error on line 1: 
"{ \"status\": \ 
^ 
Expecting '{', '[' 

任何想法?

回答

3

json_decode - 只需保存並閱讀原始的JSON。

+0

時做了JSON是在文本文件中顯示完美,但得到的數據和數組我得到警告的時候:在/var/sites/s/steve-morris1.co.uk/public_html/非法串偏移「屬性」上線新的/ INC/properties.php 27 警告:()在/var/sites/s/steve-morris1.co.uk/public_html/new/inc/properties.php提供的foreach無效參數上線43 – James 2014-12-02 21:51:07

+0

這是因爲您正在嘗試循環原始數據。您需要閱讀它,*然後*在原始數據上執行'json_decode',然後才能在PHP中循環。 – 2014-12-02 23:15:10

-1

如果您需要json_decode結果並使用結果,您需要serializeunserialize的數據。

的一種方式,以節省...

file_put_contents('properties.txt', serialize(json_decode($result))); 

加載...

$result = unserialize(file_get_contents('properties.txt')); 

這將確保從正確運行保存的數據結構來運行。當以JSON格式存儲時,除非指定,否則JSON對象是PHP對象還是關聯數組都不清楚。 serialize沒有這個問題。

+0

嘗試這個我得到 - 警告:json_decode()期望參數1是字符串,對象在/var/sites/s/steve-morris1.co.uk/public_html/new/inc/properties.php 26行 警告:/var/sites/s/steve-morris1.co.uk/public_html/new/inc/properties.php爲的foreach()提供在線44 – James 2014-12-02 21:44:11

+0

爲什麼這裏不必要的混合序列化的參數無效?只是額外的開銷。有絕對如何NO歧義PHP對待與關於對象與關聯數組JSON編碼的數據,因爲有作爲關聯數組中JSON構造沒有這樣的事情。當開發人員想使用'json_decode()'選項強制關聯數組,不要做它一貫的不確定性存在。沒有深入研究這個選項,PHP只會將JSON反序列化爲對象和數字索引數組。特別是在這種情況下,你所要做的就是製作JSON文件的本地副本,爲什麼要改變它? – 2014-12-02 21:44:32

+0

警告:在/var/sites/s/steve-morris1.co.uk/public_html/new/inc/properties.php爲的foreach()供給線44無效的參數 – James 2014-12-02 21:46:11

3

json_decode()將返回一個數組或對象(一般來說)。你不能只把這個數組/對象寫到一個文件中。在字符串上下文中編寫數組只會給你字面上的單詞Array

爲什麼不直接寫出原始的JSON文本?

file_put_contents('cache.json', file_get_contents($url)); 

然後

$data = json_decode(file_get_contents('cache.json')); 

你會花一點的CPU時間做每次解碼,但至少你會得到真實的數據,而不是破壞Array或什麼的。

相關問題