json-expect-parser
An alternative JSON parser.
Synopsis
t.json
[
{
"id": 1,
"name": "ksss",
"admin": true
},
{
"id": 2,
"name": "foo",
"admin": false
},
{
"id": 3,
"name": "bar",
"admin": false
}
]
require 'json/expect/parser'
File.open("t.json") do |io|
expect = JSON::Expect::Parser.new(io)
expect.array do
expect.object do
case expect.key
when "id"
p expect.integer
when "name"
p expect.string
when "admin"
p expect.boolean
end
end
end
end
Explicitly parse
json-expect-parser parse JSON explicitly.
expect = JSON::Expect::Parser.new(%([10, 20, 30]))
expect.array { p expect.integer }
If get unexpected value, It failed.
expect = JSON::Expect::Parser.new(%([10, 20, 30]))
expect.array { p expect.string }
API
object
expect = JSON::Expect::Parser.new(%({"a": 10, "b": 20}))
expect.object
expect.object do
expect.key
expect.integer
end
array
expect = JSON::Expect::Parser.new(%(["foo", "bar", "baz"]))
expect.array
expect.array do
expect.string
end
expect.rewind
expect.array.map { expect.string }
integer
expect = JSON::Expect::Parser.new(%(100))
expect.integer
number(alias float)
expect = JSON::Expect::Parser.new(%(1.1))
expect.float
string
expect = JSON::Expect::Parser.new(%("foo"))
expect.string
key
Use in object
then get object key string
boolean
expect = JSON::Expect::Parser.new(%("true"))
expect.boolean
null
expect = JSON::Expect::Parser.new(%("null"))
expect.null
object_or_null
expect = JSON::Expect::Parser.new(%([{"a": 1}, null]))
expect.array do
expect.object_or_null do
expect.key
expect.integer
end
end
array_or_null
expect = JSON::Expect::Parser.new(%([[1, 2, 3], null]))
expect.array do
expect.array_or_null do
expect.integer
end
end
null_or
expect = JSON::Expect::Parser.new(%({"a": "foo", "b": null}))
expect.object do
expect.key
expect.null_or { expect.string }
end
value(alias parse)
expect = JSON::Expect::Parser.new(%([[true, false], null, 1, "foo"]))
expect.value
rewind
expect = JSON::Expect::Parser.new(%("foo"))
expect.string
expect.string
expect.rewind
expect.string
Benchmark
8320.0kb
38420.0kb
ruby t.rb 0.19s user 0.06s system 98% cpu 0.257 total
8124.0kb
10732.0kb
ruby j.rb 0.83s user 0.06s system 99% cpu 0.891 total