Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析大量JSON哈希数组_Json_Ruby_Parsing_Jsonparser_Yajl - Fatal编程技术网

解析大量JSON哈希数组

解析大量JSON哈希数组,json,ruby,parsing,jsonparser,yajl,Json,Ruby,Parsing,Jsonparser,Yajl,我试图解析一个JSON对象,它由几个散列和大量散列组成(有时数组中有300000个散列,200MB)。下面是JSON对象的一个示例。我需要在数组report\u数据集中按哈希解析哈希 在我尝试的每一种方法中,包括一些使用yajl-ruby和json-streamer的方法,我的应用程序都被杀死了。当我使用parse_chunk时 def parse_very_large_json options= {symbolize_keys:false} parser =

我试图解析一个JSON对象,它由几个散列和大量散列组成(有时数组中有300000个散列,200MB)。下面是JSON对象的一个示例。我需要在数组
report\u数据集中按哈希解析哈希

在我尝试的每一种方法中,包括一些使用
yajl-ruby
json-streamer
的方法,我的应用程序都被杀死了。当我使用
parse_chunk

def parse_very_large_json
        options= {symbolize_keys:false}
        parser = Yajl::Parser.new(options)
        parser.on_parse_complete = method(:print_each_item)

        report_array = parser.parse_chunk(json_string) 
end

def print_each_item report
      report["report-datasets"].each do |dataset|
      puts “this is an element of the array“
      puts dataset
    end
end
解析发生了,但最终还是被终止了

问题似乎在于,
Yajl::Parser.new().parse
Yajl::Parser.new().parse_chunk
在这两种被终止的方法中没有太大区别


如何在不杀死rails应用程序的情况下有效地解析如此庞大的JSON数组的元素?

当你的应用程序被杀死时,操作系统会发出任何错误消息?nada@emaillenin,我一直在用
rspec
运行我的测试,我可以看到整个解析器打印数组的每个元素,直到我突然得到一个
killed
stdout。就是这样。你能试试Oj gem吗?这似乎是一个选择,但我需要看一下。这似乎更像是构建自己的解析器。你们用过它吗?你们试过文章中描述的方法吗?它使用Oj::ScHandler解析器,但
def parse_very_large_json
        options= {symbolize_keys:false}
        parser = Yajl::Parser.new(options)
        parser.on_parse_complete = method(:print_each_item)

        report_array = parser.parse_chunk(json_string) 
end

def print_each_item report
      report["report-datasets"].each do |dataset|
      puts “this is an element of the array“
      puts dataset
    end
end