[php]导入超大json文件
前言
在之前的文章《做一个twitter的插件玩玩》中,我做了一个批量删除推文(转发推文)的工具,该工具能够删除前3200条推文,但因为总数太多(4.3万条),api接口不支持获取所有的推文,所以我采用了下载的方式,直接下载了所有的推文。下载后需要导入到插件中,这样可以通过插件的功能进行对应的推文操作。

可以看到tweet.js还是挺大的,json这么大其实是很难处理的。数据虽然只有4万条,但解析起来是无力的。
寻找解决方案
最初的想法是自己写一个解析器,用一次就丢的那种,但是想想这样性价比太低了,以后要是又要用呢?所以就开始在gayhub上找。终于找到了一个大json解析方案:jsonstreamingparser,这是大json文件的解析,是异步的方式进行调用解析到的数据。但只是单条,通过重写listen能支持多条,当然这里已经有人写了:JsonCollectionParser
使用
数组解析的那个库需要支持的json格式,在readme.md中有介绍。
我这里主要是要用数组的方式来解析。请看下面的例子:
public function myFunction(){
    //从请求中获取文件信息。
    if (!empty($_FILES)) {
        $file = array_pop($_FILES);
        if (0 == $file['error'] && is_uploaded_file($file['tmp_name'])) {
            $path = $file['tmp_name'];
            self::processFileAndUpdateTwitter($path);
        } else {
            $this->widget('Widget_Notice')->set(_t('json文件上传失败'), 'error');
        }
    }
}
private function processFileAndUpdateTwitter($path){
    $util=$this;
    $parser = new \JsonCollectionParser\Parser();
    $parser->parse($path, function (array $json) use (&$util) {
        //封装实体对象,落地到数据库中
        if(!empty($json)){
            $twitterIns=new class{};
            $obj= (object)$json['tweet'];
            $twitterIns->id_str=$obj->id_str;
            $util->twitterHelp->addUserTimeLineTweetToDB($twitterIns);
        }
    });
}
                        本文来自:[php]导入超大json文件-小码农,转载请保留本条链接,感谢!
                                    
                                    温馨提示:
                                
                                
                                    本文最后更新于 2021年02月23日,已超过 1,715 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
                                
                            正文到此结束
                    
                    
                - 本文标签: json 超大文件
 - 本文链接: https://djc8.cn/archives/php-import-large-json-file.html
 - 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
 
热门推荐
相关文章
                        该篇文章的评论功能已被站长关闭
                    
        
                                    
                                    