Sha256: 9b2f0be04fe27058f98726e349707f4dc7fb4bba8586427ee50797f7878f7ab0
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
module JSON module Stream # A parser listener that builds a full, in memory, object from a JSON # document. This is similar to using the json gem's `JSON.parse` method. # # Examples # # parser = JSON::Stream::Parser.new # builder = JSON::Stream::Builder.new(parser) # parser << '{"answer": 42, "question": false}' # obj = builder.result class Builder METHODS = %w[start_document end_document start_object end_object start_array end_array key value] attr_reader :result def initialize(parser) METHODS.each do |name| parser.send(name, &method(name)) end end def start_document @stack = [] @keys = [] @result = nil end def end_document @result = @stack.pop end def start_object @stack.push({}) end def end_object return if @stack.size == 1 node = @stack.pop top = @stack[-1] case top when Hash top[@keys.pop] = node when Array top << node end end alias :end_array :end_object def start_array @stack.push([]) end def key(key) @keys << key end def value(value) top = @stack[-1] case top when Hash top[@keys.pop] = value when Array top << value else @stack << value end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
json-stream-1.0.0 | lib/json/stream/builder.rb |
json-stream-0.2.2 | lib/json/stream/builder.rb |