Разбор массивного массива JSON - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь проанализировать объект 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?

...