我正在尝试解析一个 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-ruby
and的方法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 数组的元素?