Class: JsonParser
- Inherits:
-
Object
- Object
- JsonParser
- Defined in:
- lib/com/microsoft/json-parser.rb
Instance Method Summary collapse
-
#initialize(logger, linear_reader) ⇒ JsonParser
constructor
A new instance of JsonParser.
- #parse(on_json_cbk, on_skip_malformed_cbk) ⇒ Object
Constructor Details
#initialize(logger, linear_reader) ⇒ JsonParser
Returns a new instance of JsonParser.
16 17 18 19 20 21 22 23 24 |
# File 'lib/com/microsoft/json-parser.rb', line 16 def initialize(logger, linear_reader) @logger = logger @linear_reader = linear_reader @stream_base_offset = 0 @stream_reader = StreamReader.new(@logger,@linear_reader) @parser_factory = javax::json::Json.createParserFactory(nil) @parser = @parser_factory.createParser(@stream_reader) end |
Instance Method Details
#parse(on_json_cbk, on_skip_malformed_cbk) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/com/microsoft/json-parser.rb', line 26 def parse(on_json_cbk, on_skip_malformed_cbk) completed = false while !completed completed, start_index, end_index = parse_single_object(on_json_cbk) if !completed # if current position in the stream is not a well formed JSON then # I can skip all future chars until I find a '{' so I won't have to create the parser for each char json_candidate_start_index = @stream_reader.find('{', end_index) json_candidate_start_index = @stream_reader.get_cached_stream_length - 1 if json_candidate_start_index.nil? @logger.debug("JsonParser::parse Skipping Malformed JSON (start: #{start_index} end: #{end_index} candidate: #{json_candidate_start_index - 1}). Resetting the parser") end_index = json_candidate_start_index - 1 on_skip_malformed_cbk.call(@stream_reader.get_stream_buffer(start_index, end_index)) @stream_reader.drop_stream(end_index + 1) @stream_reader.reset_cached_stream_index(0) @stream_base_offset = 0 @parser.close() if @stream_reader.get_cached_stream_length <= 1 on_skip_malformed_cbk.call(@stream_reader.get_stream_buffer(0, -1)) return end @parser = @parser_factory.createParser(@stream_reader) end end end |