Я пытаюсь проанализировать объект JSON, который состоит из нескольких хешей и массива хешей (иногда 300 000 хешей внутри массива, 200 МБ).Вот пример объекта 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
и 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
и * 1017 нет большой разницы* в обоих подходах, которые убиты.
Как можно эффективно проанализировать элементы такого массивного массива JSON, не убивая приложение rails?