{"id":20290355,"url":"https://github.com/ksss/json-expect-parser","last_synced_at":"2026-06-04T02:31:23.350Z","repository":{"id":56879538,"uuid":"65913528","full_name":"ksss/json-expect-parser","owner":"ksss","description":null,"archived":false,"fork":false,"pushed_at":"2016-08-22T14:10:15.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-09-17T19:47:37.804Z","etag":null,"topics":["json-parser","mruby","ruby"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ksss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-17T14:19:25.000Z","updated_at":"2016-08-17T14:20:01.000Z","dependencies_parsed_at":"2022-08-20T11:40:42.504Z","dependency_job_id":null,"html_url":"https://github.com/ksss/json-expect-parser","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksss%2Fjson-expect-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksss%2Fjson-expect-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksss%2Fjson-expect-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksss%2Fjson-expect-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ksss","download_url":"https://codeload.github.com/ksss/json-expect-parser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241787488,"owners_count":20020099,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json-parser","mruby","ruby"],"created_at":"2024-11-14T15:07:13.870Z","updated_at":"2025-12-02T07:03:07.149Z","avatar_url":"https://github.com/ksss.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"json-expect-parser\n===\n\nAn alternative JSON parser.\n\n## Synopsis\n\nt.json\n\n```json\n[\n  {\n    \"id\": 1,\n    \"name\": \"ksss\",\n    \"admin\": true\n  },\n  {\n    \"id\": 2,\n    \"name\": \"foo\",\n    \"admin\": false\n  },\n  {\n    \"id\": 3,\n    \"name\": \"bar\",\n    \"admin\": false\n  }\n]\n```\n\n```rb\nrequire 'json/expect/parser'\n\nFile.open(\"t.json\") do |io|\n  expect = JSON::Expect::Parser.new(io)\n  expect.array do\n    expect.object do\n      case expect.key\n      when \"id\"\n        p expect.integer #=\u003e 1, 2, 3\n      when \"name\"\n        p expect.string #=\u003e \"ksss\", \"foo\", \"bar\"\n      when \"admin\"\n        p expect.boolean #=\u003e true, false, false\n      end\n    end\n  end\nend\n```\n\n## Explicitly parse\n\njson-expect-parser parse JSON explicitly.\n\n```rb\nexpect = JSON::Expect::Parser.new(%([10, 20, 30]))\nexpect.array { p expect.integer } #=\u003e 10, 20, 30\n```\n\nIf get unexpected value, It failed.\n\n```rb\nexpect = JSON::Expect::Parser.new(%([10, 20, 30]))\nexpect.array { p expect.string }\n#=\u003e JSON::Expect::ParseError: expected \"\\\"\" but was \"1\"\n```\n\n## API\n\n### object\n\n```rb\nexpect = JSON::Expect::Parser.new(%({\"a\": 10, \"b\": 20}))\n\nexpect.object\n#=\u003e #\u003cEnumerator: #\u003cJSON::Expect::Parser ...\u003e\u003e\n\nexpect.object do\n  expect.key #=\u003e \"a\", \"b\"\n  expect.integer #=\u003e 10, 20\nend\n```\n\n### array\n\n```rb\nexpect = JSON::Expect::Parser.new(%([\"foo\", \"bar\", \"baz\"]))\n\nexpect.array\n#=\u003e #\u003cEnumerator: #\u003cJSON::Expect::Parser ...\u003e\u003e\n\nexpect.array do  \n  expect.string #=\u003e \"foo\", \"bar\", \"baz\"\nend\n\nexpect.rewind\n\nexpect.array.map { expect.string }\n#=\u003e [\"foo\", \"bar\", \"baz\"]\n```\n\n### integer\n\n```rb\nexpect = JSON::Expect::Parser.new(%(100))\nexpect.integer #=\u003e 100\n```\n\n### number(alias float)\n\n```rb\nexpect = JSON::Expect::Parser.new(%(1.1))\nexpect.float #=\u003e 1.1\n```\n\n### string\n\n```rb\nexpect = JSON::Expect::Parser.new(%(\"foo\"))\nexpect.string #=\u003e \"foo\"\n```\n\n### key\n\nUse in `object` then get object key string\n\n### boolean\n\n```rb\nexpect = JSON::Expect::Parser.new(%(\"true\"))\nexpect.boolean #=\u003e true\n```\n\n### null\n\n```rb\nexpect = JSON::Expect::Parser.new(%(\"null\"))\nexpect.null #=\u003e nil\n```\n\n### object_or_null\n\n```rb\nexpect = JSON::Expect::Parser.new(%([{\"a\": 1}, null]))\nexpect.array do\n  expect.object_or_null do\n    expect.key #=\u003e \"a\"\n    expect.integer #=\u003e 1\n  end\nend\n```\n\n### array_or_null\n\n```rb\nexpect = JSON::Expect::Parser.new(%([[1, 2, 3], null]))\nexpect.array do\n  expect.array_or_null do\n    expect.integer #=\u003e 1, 2, 3\n  end\nend\n```\n\n### null_or\n\n```rb\nexpect = JSON::Expect::Parser.new(%({\"a\": \"foo\", \"b\": null}))\nexpect.object do\n  expect.key #=\u003e \"a\", \"b\"\n  expect.null_or { expect.string } #=\u003e \"foo\", nil\nend\n```\n\n### value(alias parse)\n\n```rb\nexpect = JSON::Expect::Parser.new(%([[true, false], null, 1, \"foo\"]))\nexpect.value\n#=\u003e [[true, false], nil, 1.0, \"foo\"]\n```\n\n### rewind\n\n```rb\nexpect = JSON::Expect::Parser.new(%(\"foo\"))\nexpect.string #=\u003e \"foo\"\nexpect.string #=\u003e \"foo\"\n#=\u003e JSON::Expect::ParseError: expected \"\\\"\" but was nil\nexpect.rewind\nexpect.string #=\u003e \"foo\"\n```\n\n# Benchmark\n\n```\n$ bundle ex benchmark/comparison.rb\nruby v2.3.1\nDarwin Kernel Version 15.6.0: Thu Jun 23 18:25:34 PDT 2016; root:xnu-3248.60.10~1/RELEASE_X86_64\n2109KB json string\n\n=== JSON::Ext::Parser ===\ntime: 0.08309706707950681\nmemory: 30164.0KB\n\n=== JSON::Pure::Parser ===\ntime: 0.4895962669979781\nmemory: 35684.0KB\n\n=== JSON::Expect::Parser ===\ntime: 0.7294884130824357\nmemory: 23568.0KB\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksss%2Fjson-expect-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fksss%2Fjson-expect-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksss%2Fjson-expect-parser/lists"}