将一个巨大的json文件分成不同的文件

时间:2015-02-07 13:57:22

标签: javascript json r

我在700MB周围保存了一个巨大的json文件。我无法处理它。

是否有可能将其分成10个单独的文件夹,但每个文件都有一个完整的json注释,json有前半部分到一个文件而另一个到下一个文件?

1 个答案:

答案 0 :(得分:1)

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: $!";

(仅适用于此特定文件!)

这将放置所有这些&#34;项目&#34;将块分块放入自己的编号文件中。你可以用它做你想做的事(例如把它们放到十个文件夹中),但我建议你使用你最熟悉的JSON解析器并索引这些文件,即:选择一个或多个条目(例如:id,name,goal,created_it等)并为每个条目创建一个文件,用于连接具有单个文件的条目。这样你只需要搜索这些小文件而不是整个堆。

我没有检查过它,但是有些条目可能会多次出现(例如:你可能会发现有几个名叫Smith的人),所以简单的元组很可能不会这样做。