Stackoverflow の人たちの助けを借りて、ファイルから JSON コードを解析し、 「値」をデータベースに保存できるようになりました
しかし、私が読み込もうとしているファイルは、実際には 2GB の巨大なファイルです。私の Web サーバーはこのファイルを保持しません。ただし、ZIPPED バージョン (つまり 80MB) は保持されます (つまり .GZ)。
ZIPPED ファイル (.GZ) から JSON を解析する方法があると思います........誰か助けてくれますか?
私はこれを行うと信じている以下の関数を見つけました(私は思う)が、それを自分のコードにリンクする方法がわかりません
private function uncompressFile($srcName, $dstName) {
$sfp = gzopen($srcName, "rb");
$fp = fopen($dstName, "w");
while ($string = gzread($sfp, 4096)) {
fwrite($fp, $string, strlen($string));
}
gzclose($sfp);
fclose($fp);
}
私の現在のPHPコードは以下にあり、動作します。基本的な小さなファイルを読み取り、JSON がそれをデコードし (JSON は一連の個別の行にあるため、FILE_IGNORE_NEW_LINES が必要です)、値を取得して MySQL データベースに保存します。
ただし、Web サーバーの 100 MB のストレージを超えずに ZIPPED ファイルを読み取ることができるように、これら 2 つのコードを何らかの方法で組み合わせる必要があると考えています。
$file="CIF_ALL_UPDATE_DAILY_toc-update-sun";
$trains = file($json_filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($trains as $train) {
$json=json_decode($train,true);
foreach ($json as $key => $value) {
$input=$value['main_train_uid'];
$q="INSERT INTO railstptest (main_train_uid) VALUES ('$input')";
$r=mysqli_query($mysql_link,$q);
}
}
}
if (is_null($json)) {
die("Json decoding failed with error: ". json_last_error());
}
mysqli_close($mysql_link);
どうもありがとう
編集
JSON の短いスニペットを次に示します。これらのシリーズがあります
いくつかの重要な値を取得したいだけです。たとえば、値 G90491 と P20328 です。必要のない情報がたくさん
{"JsonAssociationV1":{"transaction_type":"Delete","main_train_uid":"G90491","assoc_train_uid":"G90525","assoc_start_date":"2013-09-07T00:00:00Z","location": "EDINBUR","base_location_suffix":null,"diagram_type":"T","CIF_stp_indicator":"O"}} {"JsonAssociationV1":{"transaction_type":"Delete","main_train_uid":"P20328"," assoc_train_uid":"P21318","assoc_start_date":"2013-08-23T00:00:00Z","location":"MARYLBN","base_location_suffix":null,"diagram_type":"T","CIF_stp_indicator":" C"}}