Sha256: 7e278e20abd4e3a9d98d438d996bfd41757f99014cdf429c4ae36c9068297c66
Contents?: true
Size: 1.17 KB
Versions: 1
Compression:
Stored size: 1.17 KB
Contents
# frozen_string_literal: true module Chronicle module ETL class JSONExtractor < Chronicle::ETL::Extractor include Extractors::Helpers::InputReader register_connector do |r| r.identifier = :json r.description = 'JSON' end setting :jsonl, default: true, type: :boolean setting :path, default: nil, type: :string def prepare @jsons = [] load_input do |input| data = parse_data(input) @jsons += [data].flatten end end def extract @jsons.each do |json| yield Chronicle::ETL::Extraction.new(data: json) end end def results_count @jsons.count end private def parse_data(data) parsed_data = JSON.parse(data) if @config.path parsed_data.dig(*@config.path.split('.')) else parsed_data end rescue JSON::ParserError raise Chronicle::ETL::ExtractionError, 'Could not parse JSON' end def load_input(&block) if @config.jsonl read_input_as_lines(&block) else read_input(&block) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
chronicle-etl-0.6.1 | lib/chronicle/etl/extractors/json_extractor.rb |