class Oj::ScHandler
A Simple Callback Parser
(SCP) for JSON
. The Oj::ScHandler
class should be subclassed and then used with the Oj.sc_parse()
method. The Scp methods will then be called as the file is parsed. The handler does not have to be a subclass of the ScHandler
class as long as it responds to the desired methods.
@example
require 'oj' class MyHandler < ::Oj::ScHandler def hash_start {} end def hash_set(h,k,v) h[k] = v end def array_start [] end def array_append(a,v) a << v end def add_value(v) p v end def error(message, line, column) p "ERROR: #{message}" end end File.open('any.json', 'r') do |f| Oj.sc_parse(MyHandler.new, f) end
To make the desired methods active while parsing the desired method should be made public in the subclasses. If the methods remain private they will not be called during parsing.
def hash_start(); end def hash_end(); end def hash_key(key); end def hash_set(h, key, value); end def array_start(); end def array_end(); end def array_append(a, value); end def add_value(value); end
As certain elements of a JSON
document are reached during parsing the callbacks are called. The parser helps by keeping track of objects created by the callbacks but does not create those objects itself.
hash_start
When a JSON
object element starts the hash_start
() callback is called if public. It should return what ever Ruby Object
is to be used as the element that will later be included in the hash_set
() callback.
hash_end
When a hash key is encountered the hash_key
method is called with the parsed hash value key. The return value from the call is then used as the key in the key-value pair that follows.
hash_key
At the end of a JSON
object element the hash_end
() callback is called if public.
hash_set
When a key value pair is encountered during parsing the hash_set
() callback is called if public. The first element will be the object returned from the enclosing hash_start
() callback. The second argument is the key and the last is the value.
array_start
When a JSON
array element is started the array_start
() callback is called if public. It should return what ever Ruby Object
is to be used as the element that will later be included in the array_append
() callback.
array_end
At the end of a JSON
array element the array_end
() callback is called if public.
array_append
When a element is encountered that is an element of an array the array_append
() callback is called if public. The first argument to the callback is the Ruby object returned from the enclosing array_start
() callback.
add_value
The handler is expected to handle multiple JSON
elements in one stream, file, or string. When a top level JSON
has been read completely the add_value
() callback is called. Even if only one element was ready this callback returns the Ruby object that was constructed during the parsing.
Public Class Methods
Create a new instance of the ScHandler
class.
# File lib/oj/schandler.rb, line 108 def initialize() end
Private Instance Methods
# File lib/oj/schandler.rb, line 135 def add_value(value) end
# File lib/oj/schandler.rb, line 138 def array_append(a, value) end
# File lib/oj/schandler.rb, line 132 def array_end() end
# File lib/oj/schandler.rb, line 129 def array_start() end
# File lib/oj/schandler.rb, line 119 def hash_end() end
# File lib/oj/schandler.rb, line 122 def hash_key(key) key end
# File lib/oj/schandler.rb, line 126 def hash_set(h, key, value) end
To make the desired methods active while parsing the desired method should be made public in the subclasses. If the methods remain private they will not be called during parsing.
# File lib/oj/schandler.rb, line 116 def hash_start() end