2

我正在尝试解析一个 JSON 对象,该对象由一些散列和大量散列组成(有时数组内有 300,000 个散列,200MB)。这是 JSON 对象的示例。我需要通过数组内的哈希来解析哈希report_datasets

https://api.datacite.org/reports/0cb326d1-e3e7-4cc1-9d86-7c5f3d5ca310

{ report_header: {report_id: 33738, report_name: "Report first"},
  report_datasets: [
  {dataset_id:1, yop:1990},
  {dataset_id:2, yop:2007},
  {dataset_id:3,  yop:1983},
  .
  {dataset_id:578999,yop:1964},
  ]
}

在我尝试的每一种方法中,包括一些使用yajl-rubyand的方法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 数组的元素?

4

0 回答 0