我有一个巨大的json文件保存在本地,围绕700MB
。我无法处理它。将一个巨大的json文件分解成单独的文件
是否有可能将其分成10个单独的文件夹,但每个文件都有一个完整的JSON注意有一个JSON有一个文件的前一半,另一个到下一个?
我有一个巨大的json文件保存在本地,围绕700MB
。我无法处理它。将一个巨大的json文件分解成单独的文件
是否有可能将其分成10个单独的文件夹,但每个文件都有一个完整的JSON注意有一个JSON有一个文件的前一半,另一个到下一个?
JSON文件的结构允许进行简单的切片:它包含几个“项目”块(确切地说是7097)。这些“项目”是最高级别,并且包含不同数量的单个项目。
在这些接缝线处撕开大文件是相当容易的,有几行Perl会这样做(Perl因为它可用于多种操作系统并且很容易处理大文件):
#!/usr/bin/perl
use strict;
my $flag = 0;
my $count = 0;
my $start = "Kickstarter_Kickstarter_";
my $ending = "_.jison";
my $filename = "";
open (FILE, '<', 'Kickstarter_Kickstarter.json')
or die "file opening failed: $!";
while (<FILE>) {
if (/"projects": \[/){
if($flag == 0){
$flag = 1;
$filename = $start.$count.$ending;
open (CHUNK, '>>', $filename)
or die "file opening failed: $!";
print STDOUT "Writing a chunk to ".$filename."\n";
$count++;
print CHUNK "{ ".$_;
next;
}
if ($flag == 1){
close (CHUNK) or die "file closing failed: $!";
$flag = 0;
}
}
if(tell(CHUNK) != -1){
print CHUNK $_ unless /^\,{/;
}
close (FILE) or die "file closing failed: $!";
(只会工作,为这个特定的文件!)
这将会把每这些“项目”块的变成自己的,编号的文件。你可以用它来做你想做的事情(例如把它们放到十个文件夹中),但我会建议使用你最熟悉的JSON解析器并为这些文件建立索引,即:选择一个或多个条目(例如:id,名称,目标,created_it等),并为每个条目创建一个文件,以便将条目与单个文件连接起来。这样你只需要搜索这些小文件而不是整个堆。
我还没有检查过,但有些条目可能有多个出现(例如:你可能会发现几个人叫史密斯),所以简单的元组很可能不会这样做。
这部分有点令人困惑......“每个文件都有一个完整的json记录,json有一个文件的前半部分,另一个文件到下一个文件”。你可以补口吗?此外,文件的结构和你想要做的事情一旦分裂,可能会发挥怎样的作用,或者它是否可以分裂。 – 2015-02-07 16:28:55
@DerekMcCraeNorton感谢您的评论。这里是我尝试脱离http://werobots.io/wp-content/uploads/2014/08/Kickstarter_Kickstarter.json_.zip的文件,如果你打开它,你必须从开始和结束删除一些行,因为它是清楚的JSON,如果你不删除他们 – user3456789 2015-02-07 16:36:10
当然,我可以reword:我的意思是,JSON有一个结构,当我试图根据线或体积来分离我的文件时,JSON例如可能有6个值并将其分开3值转到第一个文件,其他3转到第二个文件,这样json就会丢失全部信息。 – user3456789 2015-02-07 16:38:35