Method: JSON::Stream::Parser#initialize

Defined in:
lib/json/stream/parser.rb

#initialize(&block) ⇒ Parser

Create a new parser with an optional initialization block where we can register event callbacks.

Examples

parser = JSON::Stream::Parser.new do
  start_document { puts "start document" }
  end_document   { puts "end document" }
  start_object   { puts "start object" }
  end_object     { puts "end object" }
  start_array    { puts "start array" }
  end_array      { puts "end array" }
  key            { |k| puts "key: #{k}" }
  value          { |v| puts "value: #{v}" }
end


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/json/stream/parser.rb', line 89

def initialize(&block)
  @state = :start_document
  @utf8 = Buffer.new
  @listeners = {
    start_document: [],
    end_document: [],
    start_object: [],
    end_object: [],
    start_array: [],
    end_array: [],
    key: [],
    value: []
  }

  # Track parse stack.
  @stack = []
  @unicode = ""
  @buf = ""
  @pos = -1

  # Register any observers in the block.
  instance_eval(&block) if block_given?
end