2013-03-11 60 views
1
foreach ($likes as $like) { 
    // Extract the pieces of info we need from the requests above 
    $id = idx($like, 'id'); 
    $item = idx($like, 'name'); 

    fwrite($fileout,json_encode($like)); 
    fwrite($fileout,PHP_EOL); 
} 

$json_string = file_get_contents('testson.json'); 
$get_json_values=json_decode($json_string,true); 

foreach ($get_json_values as $getlikes) { ?> 
      <li> 
      <a href="https://www.facebook.com/<?php echo $getlikes['id']; ?>" target="_top"> 
      </li> 
     <?php 
     } 

打開瀏覽器時,有一個Warning: Invalid argument supplied for foreach()。我不明白爲什麼我的論點是無效的。json_decode到數組?

如果我添加了if,沒有任何反應,它顯示了實際問題。但問題是什麼是正確的方法來做到這一點?我很確定這很簡單,但我一直在爲此掙扎超過一個小時。我的JSON文件有這樣的領域,所以我不認爲會有問題:

{"category":"Musician\/band","name":"Yann Tiersen (official)","id":"18359161762"} 

請幫助我,我真的累了吧,我不知道該怎麼辦。所以... 我怎樣才能解碼文件到一個數組?

+1

你試過了嗎,json_decode('data.json',true)? (真正的標誌是數組輸出,而不是對象) – jlasarte 2013-03-11 16:26:35

+0

foreach()在對象上和數組一樣好 - 如果他得到一個'無效參數提供...'錯誤,那麼他會傳遞其他東西(可能boolean false)。 – 2013-03-11 16:31:26

+0

是的,我已經試過真正的國旗編輯 – 2013-03-11 16:36:23

回答

2

您需要testson.json文件的內容不只是名稱!

通過PHP收到內容:

$json_string = file_get_contents('testson.json'); 

確保沒有被通過

var_dump(json_decode($json_string)); 

,然後測試它在文件中有效的JSON內容調用

foreach (json_decode($json_string) as $getlikes) { ?> 

更新: 當您保存文件並在幾毫秒後訪問它時,可能是因爲文件系統太慢而沒有向您顯示正確的內容。

添加

fclose($fileout); 
clearstatcache(); 

file_get_contents();調用之前!

我建議使用file_put_contents()file_read_contents()得到 擺脫這樣的問題!

+0

'的情況下工作非常感謝!但不會是更好的方法是使用'json_decode($ json_string,true)',以防萬一? – 2013-03-11 16:39:15

+0

@BujancaMihai,它會更清晰。但是,由於PHP試圖將變量類型轉換爲必要的變量類型,並使用額外的參數'真'! – powtac 2013-03-11 16:40:49

+0

仍然無法正常工作,我只是把它放在我的代碼中:( – 2013-03-11 16:42:38

1

json_decode期待一個字符串,因爲它是第一個參數。你傳遞的是我猜測的是一個文件名。你應該像這樣首先加載文件...

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