合并Json对象,无论内存如何

时间:2014-01-25 11:26:10

标签: php 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写回json文件,如:

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

这就是问题所在:

  1. 如果我们正在讨论json对象的 LOTS ,我是否会面临内存限制错误(这就是为什么我决定首先拆分对象 - 将所有结果存储在内存触发内存相关错误并崩溃)?

  2. 如果以上情况属实,我怎么能绕过它,仍然“连接”这些物体?

2 个答案:

答案 0 :(得分:1)

  1. 是/否/也许。这一切都取决于你的memory_limit到底是什么以及你需要多少内存来处理所有的JSON。
  2. 如果可以的话,增加内存限制;处理异地并将所有json数据放入DB以进行更智能的处理

答案 1 :(得分:1)

如果来自文件的对象被封装到一个大数组中,实际上不需要读取和解码它们,假设它们实际上是有效的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);

这几乎不会使用内存而且速度非常快。