php导入json文件_[php]导入超大json文件

前言

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

46d16f35de0624aed0fb8161f9a7a2b4.png

可以看到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);

}

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值