2014-01-25 44 views
0

OK的,這就是我需要:合併JSON對象,無論內存

  • 我有幾個(很多很多實際的)寫入文件的JSON對象(例如result.1.jsonresult.2.json等)
  • 我需要所有這些結合在一個陣列,如:

    $results = array (
        json_decode(file_get_contents("result.1.json"),  
        json_decode(file_get_contents("result.2.json")), 
        ... 
    ) 
    
  • ,然後寫所有$results回JSO N文件,如:

    file_put_contents("results.json",$results); 
    

而這裏的問題:

  1. 如果我們談論地段JSON對象,我要去面對的一個內存限制錯誤(這就是爲什麼我決定首先拆分對象 - 將所有結果存儲在內存中引發了與內存相關的錯誤並崩潰)?

  2. 如果以上是真的,我怎麼能規避它,並仍然「連接」對象?

+0

給你想合併的文件的更多細節 – KiraLT

回答

1

如果從文件(S)的對象將會被封閉在僅僅一個大陣,實際上沒有必要讀取和解碼他們,假設他們實際上是有效的JSON語法。

數組是那種:

[ 
    { obj1}, 
    { obj2} 
] 

所以,你可以做到以下幾點:

file_put_contents("results.json","[\n"); 
while (... has more files ...) 
{ 
    file_put_contents(file_get_contents($theFile), FILE_APPEND); 
    if (.... has more files ....) 
     file_put_contents("results.json",",\n", FILE_APPEND); 
} 
file_put_contents("results.json","]\n", FILE_APPEND); 

這將使用幾乎沒有記憶,是相當快的。

+0

是的,這也是我所猜測的解決方案之一...... ;-) –

1
  1. 是/否/可能。這一切都取決於你的memory_limit是什麼,以及處理所有JSON需要多少內存。
  2. 如果可以,增加內存限制;過程異地,並把所有的JSON數據DB更明智的處理
+0

嗯,我剛剛應用了'memory_limit'技巧;讓我們看看這可以幫助多少... :-) –

+1

程序員規則:#1)任何限制都會被超出。 #2)任何假設都是錯誤的。 –