Module: NOSJ
- Defined in:
- lib/nosj.rb,
lib/nosj/json.rb,
lib/nosj/version.rb,
lib/nosj/multi_json.rb,
sig/nosj.rbs
Overview
Public interfaces only. The native layer (NOSJ.parse_native and friends) and the JSON drop-in's patched JSON singleton methods are implementation detail and deliberately unsigned.
Defined Under Namespace
Modules: JSONDropIn Classes: Error, GeneratorError, MultiJsonAdapter, NestingError
Constant Summary collapse
- VERSION =
The gem version.
"0.1.0"
Class Method Summary collapse
-
.at_pointer(source, pointer, opts = nil) ⇒ Object?
Partial parsing by JSON Pointer (with the standard +~0+/+~1+ escapes).
-
.at_pointers(source, pointers, opts = nil) ⇒ Array<Object, nil>
Batch NOSJ.at_pointer: the pointer-string counterpart of NOSJ.dig_many, resolving the whole set in one pass.
-
.dig(source, *path) ⇒ Object?
Partial parsing, Hash#dig-shaped: extracts one value from a JSON string without materializing the rest of the document.
-
.dig_many(source, paths, opts = nil) ⇒ Array<Object, nil>
Batch NOSJ.dig: many paths resolved in ONE pass over the document.
-
.generate(obj, opts = nil) ⇒ String
Generates JSON, JSON.generate-compatible: identical output bytes, including the gem's exact float formatting.
-
.parse(source, opts = nil) ⇒ Object
Parses a JSON document, JSON.parse-compatible: same values, same option names, same behavior, byte-for-byte.
-
.pretty_generate(obj, opts = nil) ⇒ String
Generates human-readable JSON, JSON.pretty_generate-compatible (two-space indent, newlines between elements).
-
.valid?(source, opts = nil) ⇒ Boolean
Validates a document without building any Ruby values: the full parser (tokenizers, string decode, number validation) runs into a null sink, 1.8-2.5x faster than NOSJ.parse.
Class Method Details
.at_pointer(source, pointer, opts = nil) ⇒ Object?
Partial parsing by JSON Pointer (with the standard +~0+/+~1+ escapes). The matched subtree materializes under the same options as parse.
174 175 176 |
# File 'lib/nosj.rb', line 174 def self.at_pointer(source, pointer, opts = nil) at_pointer_native(source, pointer, opts) end |
.at_pointers(source, pointers, opts = nil) ⇒ Array<Object, nil>
Batch at_pointer: the pointer-string counterpart of dig_many, resolving the whole set in one pass.
190 191 192 |
# File 'lib/nosj.rb', line 190 def self.at_pointers(source, pointers, opts = nil) at_pointers_native(source, pointers, opts) end |
.dig(source, *path) ⇒ Object?
Partial parsing, Hash#dig-shaped: extracts one value from a JSON string without materializing the rest of the document. Skipped content is stepped over at SIMD block speed, so a lookup costs what it skips, not what the document weighs.
133 134 135 |
# File 'lib/nosj.rb', line 133 def self.dig(source, *path) dig_native(source, path) end |
.dig_many(source, paths, opts = nil) ⇒ Array<Object, nil>
Batch dig: many paths resolved in ONE pass over the document. The walk descends only into subtrees some path still needs, so a batch costs about as much as its single deepest lookup.
On malformed documents a batch may raise where a single dig would
return nil: one pass scans every byte some path needs.
155 156 157 |
# File 'lib/nosj.rb', line 155 def self.dig_many(source, paths, opts = nil) dig_many_native(source, paths, opts) end |
.generate(obj, opts = nil) ⇒ String
Generates JSON, JSON.generate-compatible: identical output bytes, including the gem's exact float formatting. Implemented natively (no Ruby forwarder frame; the definition lives in the extension).
|
|
# File 'lib/nosj.rb', line 64
|
.parse(source, opts = nil) ⇒ Object
Parses a JSON document, JSON.parse-compatible: same values, same option names, same behavior, byte-for-byte.
The json gem's legacy object-deserialization options
(+object_class+, array_class, decimal_class,
create_additions) are deliberately unsupported and raise
ArgumentError.
60 61 62 |
# File 'lib/nosj.rb', line 60 def self.parse(source, opts = nil) parse_native(source, opts) end |
.pretty_generate(obj, opts = nil) ⇒ String
Generates human-readable JSON, JSON.pretty_generate-compatible (two-space indent, newlines between elements). Options override the pretty defaults and are otherwise the same as generate.
91 92 93 94 |
# File 'lib/nosj.rb', line 91 def self.pretty_generate(obj, opts = nil) opts = opts.nil? ? PRETTY_GENERATE_OPTS : PRETTY_GENERATE_OPTS.merge(opts) generate_native(obj, opts) end |
.valid?(source, opts = nil) ⇒ Boolean
Validates a document without building any Ruby values: the full parser (tokenizers, string decode, number validation) runs into a null sink, 1.8-2.5x faster than parse.
Returns true iff NOSJ.parse(source, opts) would
succeed: parse refusals (malformed JSON, wrong encoding, too-deep
nesting) are false, while option and argument-type errors still
raise exactly like parse.
113 114 115 |
# File 'lib/nosj.rb', line 113 def self.valid?(source, opts = nil) valid_native(source, opts) end |