php导入json文件_[php]导入超大json文件
前言
在之前的文章《做一個(gè)twitter的插件玩玩》中,我做了一個(gè)批量刪除推文(轉(zhuǎn)發(fā)推文)的工具,該工具能夠刪除前3200條推文,但因?yàn)榭倲?shù)太多(4.3萬(wàn)條),api接口不支持獲取所有的推文,所以我采用了下載的方式,直接下載了所有的推文。下載后需要導(dǎo)入到插件中,這樣可以通過(guò)插件的功能進(jìn)行對(duì)應(yīng)的推文操作。
可以看到tweet.js還是挺大的,json這么大其實(shí)是很難處理的。數(shù)據(jù)雖然只有4萬(wàn)條,但解析起來(lái)是無(wú)力的。
尋找解決方案
最初的想法是自己寫(xiě)一個(gè)解析器,用一次就丟的那種,但是想想這樣性價(jià)比太低了,以后要是又要用呢?所以就開(kāi)始在gayhub上找。終于找到了一個(gè)大json解析方案:jsonstreamingparser,這是大json文件的解析,是異步的方式進(jìn)行調(diào)用解析到的數(shù)據(jù)。但只是單條,通過(guò)重寫(xiě)listen能支持多條,當(dāng)然這里已經(jīng)有人寫(xiě)了:JsonCollectionParser
使用
數(shù)組解析的那個(gè)庫(kù)需要支持的json格式,在readme.md中有介紹。
我這里主要是要用數(shù)組的方式來(lái)解析。請(qǐng)看下面的例子:public function myFunction(){
//從請(qǐng)求中獲取文件信息。
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) {
//封裝實(shí)體對(duì)象,落地到數(shù)據(jù)庫(kù)中
if(!empty($json)){
$twitterIns=new class{};
$obj= (object)$json['tweet'];
$twitterIns->id_str=$obj->id_str;
$util->twitterHelp->addUserTimeLineTweetToDB($twitterIns);
}
});
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的php导入json文件_[php]导入超大json文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python linux调试_pytho
- 下一篇: php 正则mac地址,正则表达式匹配M