{"id":22772491,"url":"https://github.com/willabides/rjson","last_synced_at":"2025-04-15T06:49:38.839Z","repository":{"id":47614560,"uuid":"344576659","full_name":"WillAbides/rjson","owner":"WillAbides","description":"A fast json parser for go","archived":false,"fork":false,"pushed_at":"2022-01-13T11:01:22.000Z","size":3687,"stargazers_count":54,"open_issues_count":3,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-15T06:49:28.653Z","etag":null,"topics":["go","golang","json","ragel"],"latest_commit_sha":null,"homepage":"","language":"Go","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/WillAbides.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-04T18:50:38.000Z","updated_at":"2025-03-31T09:44:22.000Z","dependencies_parsed_at":"2022-07-21T16:34:37.332Z","dependency_job_id":null,"html_url":"https://github.com/WillAbides/rjson","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":"WillAbides/goproject-tmpl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillAbides%2Frjson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillAbides%2Frjson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillAbides%2Frjson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillAbides%2Frjson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WillAbides","download_url":"https://codeload.github.com/WillAbides/rjson/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249023707,"owners_count":21199958,"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":["go","golang","json","ragel"],"created_at":"2024-12-11T17:08:44.053Z","updated_at":"2025-04-15T06:49:36.230Z","avatar_url":"https://github.com/WillAbides.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rjson\n\n[![godoc](https://pkg.go.dev/badge/github.com/willabides/rjson.svg)](https://pkg.go.dev/github.com/willabides/rjson)\n[![ci](https://github.com/WillAbides/rjson/workflows/ci/badge.svg?branch=main\u0026event=push)](https://github.com/WillAbides/rjson/actions?query=workflow%3Aci+branch%3Amain+event%3Apush)\n\nrjson is a json parser that relies on [Ragel-generated](http://www.colm.net/open-source/ragel/) state machines for most\nparsing. rjson's api is minimal and focussed on efficient parsing.\n\n## Ragel state machines\n\nThis whole thing is built around a few Ragel-generated state machines. They are defined in .rl files, and the generated\ncode is in .rl.go files. If you peek at the generated code, beware that it doesn't look like anything intended to be\nread by a human.\n\n## Read functions\n\nrjson provides Read functions for simple json values (strings, numbers, booleans and null). They each take a\n`data []byte` argument and read the first json value in data. They return a `p int` value that is the offset of the\nfirst byte after the value they read. When used in a handler, this `p` should be returned as the handler's `p`.\n\nRead functions return an error for any json type other than the type they are meant to read. This includes null. So if\nthere is a value that could be either a string or null, be sure to use `NextTokenType` to check which one it is.\n\n`ReadString` and `ReadStringBytes` take a `buf []byte` argument. `ReadStringBytes` returns the result appended to\n`buf` and `ReadString` uses it as a byte buffer when decoding strings to avoid memory allocations. `buf` may be nil in\nboth cases.\n\n## Handlers\n\nrjson uses handlers to parse complex json values (objects and arrays). The handler will implement either\n`HandleArrayValue(data []byte) (p int, err error)` or `HandleObjectValue(fieldname, data []byte) (p int, err error)`.\n`data` is the document being parsed from the current position to the end of the document.\n\nThe handler has to return `p` as either 0, or the offset after the last byte of the value it handled. This is important\nas it is how rjson knows where to resume parsing the document. When the handler returns 0, rjson uses\n`SkipValue` to find the next offset, so it is best to write handlers that return the next offset and avoid an extra call\nto `SkipValue`.\n\nWhen your handler returns an error, `HandleArrayValues` and `HandleObjectValues` will immediately return the same error.\nYou can use this to stop parsing a document once you have found all values you are after.\n\nSee [HandleObjectValues's example](https://pkg.go.dev/github.com/willabides/rjson#example-HandleObjectValues)\n\n## Standard Library Compatibility\n\nrjson endeavors to decode json to the same values as the `encoding/json` functions. In the source code, most of rjson's\nexported functions are followed by an unexported version that produces the same output using `encoding/json` instead\nof `rjson`. These are used to ensure compatibility.\n\n#### The RuneError compatibility exception\n\nWhen decoding strings, `encoding/json` will replace bytes with values over 127 that aren't part of a valid utf8 rune\nwith `utf8.RuneError`. ~~I don't think this is correct behavior~~ This is probably correct behavior for the standard \nlibrary, but rjson keeps those bytes as-is when decoding strings.\n\nIf you need standard library compatibility here, you can use `StdLibCompatibleString`, `StdLibCompatibleSlice`, and \n`StdLibCompatibleMap`.\n\n## Differential Fuzz Testing\n\nrjson uses fuzz testing extensively to test compatibility with `encoding/json`. See [fuzzers.go](./fuzzers.go) for the\nfuzz functions and [testdata/fuzz/corpus](./testdata/fuzz/corpus) for the increasingly unwieldy corpus.\n\n## What rjson doesn't do\n\n- **drop in replacement for \"encoding/json\"** - rjson doesn't aim to be a replacement for \"encoding/json\". It probably\n  won't ever unmarshal json to a struct, and it definitely won't ever marshal json. It does one thing well, and that one\n  thing is parsing json fast and with minimal memory allocations.\n\n- **import \"unsafe\"** - Not that there is necessarily anything wrong with using unsafe where it is called for. It's just\n  that you are better off avoiding it where possible, and it is possible here.\n\n- **return unchecked strings** - Some json parsers use techniques like `strings.IndexByte(data, '\"')` to skip to the end\n  of a string and return the contents uninspected. This can be dangerous when dealing with json from untrusted sources.\n  Those strings can contain control characters and other invalid json.\n\n- **parse from an io.Reader** - I would like to implement this in the future, but it's off the table for now.\n\n- **keep a global resource pool** - Some json packages have handy `Borrow` and `Return` functions that let you borrow\n  resources and avoid new allocations. rjson leaves it up to the user to decide how to do resource pooling.\n\n## Why you should still use the standard library most of the time\n\nWhile rjson is much faster than \"encoding/json\", it is faster at the cost of being more difficult to use. If you use\nrjson, your code will be more verbose and less readable than if you used the standard library. In most cases, this\nwill cost more in developer time than you will make up for in time saved parsing json.\n\nTo make rjson worthwhile, one of these should apply:\n\n- You have a very high volume of json to parse.\n- You need very low latency but are stuck using json serialization.\n\nrjson is originally written for a project where we have to process thousands of json documents per second. This is\nthe sort of project that should be using rjson.\n\n## Performance principles and tricks\n\n### Handle each byte once\n\nThis is the main guiding principle of rjson performance. Do everything you can to avoid handling the same byte twice.\n\n### fp.ParseJSONFloatPrefix\n\n`fp.ParseJSONFloatPrefix` is a rewrite of `strconv.ParseFloat` that deals in bytes instead of strings and eliminates\neverything not needed for parsing json numbers. This reduces the time to read numbers by about 60%. It's an internal\npackage for now, but I encourage anybody who is parsing json numbers to consider copying this code or writing something\nsimilar.\n\n### Predict object and array size based on previous values\n\n`ReadObject` and `ReadArray` can create a lot of nested maps and slices. It would be nice if we knew how big they would\nbe ahead of time so we can `make([]interface{}, 0, size)`, but we can't know that until we reach the end. In place of\nthat, rjson keeps track of how big the values end up being and allocates values that are as big as the previous sibling\nvalue of the same type.\n\n### Always Be Benchmarking\n\nRunning benchmarks for every change keeps me from going too far down bad paths. Also, consistently benchmarking against\nother parsers shows me where rjson can be improved.\n\nWhile I'm coding I frequently run [benchdiff](https://github.com/WillAbides/benchdiff)\nwith `script/benchdiff --benchtime 10ms --bench WhateverBenchmark`\nto get a quick comparison with the previous commit. It takes just a couple of seconds to run, and it saves a lot of time\ndown the road.\n\n## Benchmarks\n\nBenchmarks are in [./benchmarks](./benchmarks) and run with `script/compbench`. Each package that is benchmarked has its\nown file that implements the various benchmarks.\n\n### JSON data\n\nWith the exception of github_repo.json, this is all taken\nfrom [nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark)\n\nAll tested JSON data are in UTF-8.\n\nJSON file   | Size | Description\n------------|------|-----------------------\n[canada.json](testdata/benchmark_data/canada.json) [source](https://github.com/mloskot/json_benchmark/blob/master/data/canada.json) | 2199KB | Contour of Canada border in [GeoJSON](http://geojson.org/) format. Contains a lot of real numbers.\n[citm_catalog.json](testdata/benchmark_data/citm_catalog.json) [source](https://github.com/RichardHightower/json-parsers-benchmark/blob/master/data/citm_catalog.json) | 1737KB | A big benchmark file with indentation used in several Java JSON parser benchmarks.\n[twitter.json](testdata/benchmark_data/twitter.json) | 632KB | Search \"一\" (character of \"one\" in Japanese and Chinese) in Twitter public time line for gathering some tweets with CJK characters.\n[github_repo.json](testdata/benchmark_data/github_repo.json) | 6KB | The golang/go repository from GitHub's API. `curl https://api.github.com/repos/golang/go`\n\n### Compared packages\n\nThe go community is fortunate to have multiple high-performance options for parsing JSON. The benchmarks include some\nbetter known packages. They don't all have the same features, so not all the compared packages are represented in every\nbenchmark. There are also some packages with incorrect `Valid()` functions. Those are excluded until they are fixed.\n\nEvery package should be able to put their best foot forward in the benchmarks. I have tried to write the best code for\neach package in the benchmark. If anybody sees a way to improve the benchmarks for any package, please create an issue\nto let me know.\n\nThis import statement has all the players seen in the benchmarks below:\n\n```go\nimport (\nencoding_json \"encoding/json\"\n\njsonparser \"github.com/buger/jsonparser\"\njsoniter \"github.com/json-iterator/go\"\ngjson \"github.com/tidwall/gjson\"\nfastjson \"github.com/valyala/fastjson\"\nrjson \"github.com/willabides/rjson\"\ngoccyjson \"github.com/goccy/go-json\"\n)\n```\n\n### Benchmarks\n\n#### GetRepoValues\n\nGetRepoValues gets three values of different types from github_repo.json and writes them to a struct. The same as\nrunning `json.Unmarshal` with this struct:\n\n```go\ntype repoData struct {\nArchived bool   `json:\"archived\"`\nForks    int64  `json:\"forks\"`\nFullName string `json:\"full_name\"`\n}\n```\n\n#### Valid\n\nValid runs checks whether json data is valid. It's the equivalent of `json.Valid(data)`\n\n#### DistinctUserIDs\n\nDistinctUserIDs returns a slice of user ids from `twitter.json`.\n\n#### ReadObject\n\nReadObject decodes json data to a `map[string]interface{}`.\n\n#### ReadFloat64\n\nReadFloat64 parses a json number and returns its value as a float64.\n\n#### ReadInt64\n\nReadInt64 parses a json number and returns its value as an int64.\n\n#### ReadString\n\nReadString decodes a json string and returns its value as a string.\n\n#### ReadBool\n\nReadBool decodes a json `true` or `false` and returns the value.\n\n### Results\n\nThese are the results from running the benchmarks 10x and using benchstat to compare each package to rjson. You can run\nthem yourself by running `script/compbench`.\n\n### encoding_json\n\n|           name           | encoding_json (ns/op) | rjson (ns/op) |  delta  |\n|--------------------------|-------------:|-------------:|---------|\n| GetRepoValues            |      39772.3 |       2156.9 | -94.58% |\n| Valid_canada             |      6981750 |      2413060 | -65.44% |\n| Valid_citm_catalog       |      5380290 |      1645390 | -69.42% |\n| Valid_github_repo        |        19912 |       5485.7 | -72.45% |\n| Valid_twitter            |      2141580 |       611203 | -71.46% |\n| DistinctUserIDs          |      4227210 |       743022 | -82.42% |\n| ReadObject_canada        |     52882000 |     32002000 | -39.48% |\n| ReadObject_citm_catalog  |     22354300 |     11808100 | -47.18% |\n| ReadObject_github_repo   |      92965.4 |      30023.4 | -67.70% |\n| ReadObject_twitter       |      9228560 |      4593510 | -50.23% |\n| DecodeInt64_zero         |      328.378 |       13.328 | -95.94% |\n| DecodeInt64_small        |      360.122 |       14.794 | -95.89% |\n| DecodeInt64_big_negative |        563.4 |       29.224 | -94.81% |\n\n|           name           | encoding_json (B/op) | rjson (B/op) |  delta   |\n|--------------------------|------------:|------------:|----------|\n| GetRepoValues            |         250 |          16 | -93.60%  |\n| Valid_canada             |      145800 |       47619 | -67.34%  |\n| Valid_citm_catalog       |     86129.9 |       24020 | -72.11%  |\n| Valid_github_repo        |           1 |           0 | -100.00% |\n| Valid_twitter            |     12613.7 |      3345.5 | -73.48%  |\n| DistinctUserIDs          |       26794 |     4072.67 | -84.80%  |\n| ReadObject_canada        |    12070600 |     8434380 | -30.12%  |\n| ReadObject_citm_catalog  |     5468880 |     5229700 | -4.37%   |\n| ReadObject_github_repo   |     25704.1 |     17036.9 | -33.72%  |\n| ReadObject_twitter       |     2190850 |     2717220 | +24.03%  |\n| DecodeInt64_zero         |         184 |           0 | -100.00% |\n| DecodeInt64_small        |         186 |           0 | -100.00% |\n| DecodeInt64_big_negative |         208 |           0 | -100.00% |\n\n### fastjson\n\n|          name           | fastjson (ns/op) | rjson (ns/op) |  delta   |\n|-------------------------|-------------:|-------------:|----------|\n| GetRepoValues           |      4919.22 |       2156.9 | -56.15%  |\n| ReadFloat64_zero        |      28.9222 |       14.504 | -49.85%  |\n| ReadFloat64_smallInt    |       30.047 |       17.713 | -41.05%  |\n| ReadFloat64_negExp      |        43.04 |      27.6944 | -35.65%  |\n| ReadInt64_zero          |       28.564 |       12.406 | -56.57%  |\n| ReadInt64_small         |       29.473 |       13.144 | -55.40%  |\n| ReadInt64_big_negative  |       89.229 |       27.828 | -68.81%  |\n| ReadString_short_ascii  |        62.68 |        39.98 | -36.22%  |\n| ReadString_medium_ascii |      574.967 |       1872.8 | +225.72% |\n| ReadString_medium       |        301.4 |       817.07 | +171.09% |\n| ReadBool                |        19.39 |       9.0604 | -53.27%  |\n\n|          name           | fastjson (B/op) | rjson (B/op) |  delta  |\n|-------------------------|------------:|------------:|---------|\n| GetRepoValues           |          18 |          16 | -11.11% |\n| ReadFloat64_zero        |           0 |           0 | ~       |\n| ReadFloat64_smallInt    |           0 |           0 | ~       |\n| ReadFloat64_negExp      |           0 |           0 | ~       |\n| ReadInt64_zero          |           0 |           0 | ~       |\n| ReadInt64_small         |           0 |           0 | ~       |\n| ReadInt64_big_negative  |           0 |           0 | ~       |\n| ReadString_short_ascii  |           5 |           5 | ~       |\n| ReadString_medium_ascii |         896 |         896 | ~       |\n| ReadString_medium       |         384 |         384 | ~       |\n| ReadBool                |           0 |           0 | ~       |\n\n### gjson\n\n|           name           | gjson (ns/op) | rjson (ns/op) |  delta  |\n|--------------------------|-------------:|-------------:|---------|\n| GetRepoValues            |      2408.33 |       2156.9 | -10.44% |\n| Valid_canada             |      2531630 |      2413060 | -4.68%  |\n| Valid_citm_catalog       |      1665450 |      1645390 | ~       |\n| Valid_github_repo        |       7892.7 |       5485.7 | -30.50% |\n| Valid_twitter            |       806403 |       611203 | -24.21% |\n| DistinctUserIDs          |      1471150 |       743022 | -49.49% |\n| ReadObject_canada        |     64774800 |     32002000 | -50.59% |\n| ReadObject_citm_catalog  |     16946300 |     11808100 | -30.32% |\n| ReadObject_github_repo   |      31775.6 |      30023.4 | -5.51%  |\n| ReadObject_twitter       |      7668040 |      4593510 | -40.10% |\n| ReadFloat64_zero         |      45.7111 |       14.504 | -68.27% |\n| ReadFloat64_smallInt     |       55.236 |       17.713 | -67.93% |\n| ReadFloat64_negExp       |       89.102 |      27.6944 | -68.92% |\n| ReadInt64_zero           |       51.251 |       12.406 | -75.79% |\n| ReadInt64_small          |       62.192 |       13.144 | -78.87% |\n| ReadInt64_big_negative   |       156.53 |       27.828 | -82.22% |\n| DecodeInt64_zero         |       52.371 |       13.328 | -74.55% |\n| DecodeInt64_small        |       60.197 |       14.794 | -75.42% |\n| DecodeInt64_big_negative |      155.967 |       29.224 | -81.26% |\n| ReadString_short_ascii   |       106.93 |        39.98 | -62.61% |\n| ReadString_medium_ascii  |      3896.33 |       1872.8 | -51.93% |\n| ReadString_medium        |       1669.1 |       817.07 | -51.05% |\n| ReadBool                 |       44.706 |       9.0604 | -79.73% |\n\n|           name           | gjson (B/op) | rjson (B/op) |  delta   |\n|--------------------------|------------:|------------:|----------|\n| GetRepoValues            |         200 |          16 | -92.00%  |\n| Valid_canada             |     49880.1 |       47619 | -4.53%   |\n| Valid_citm_catalog       |     24880.3 |       24020 | -3.46%   |\n| Valid_github_repo        |           0 |           0 | ~        |\n| Valid_twitter            |     4417.56 |      3345.5 | -24.27%  |\n| DistinctUserIDs          |     32438.1 |     4072.67 | -87.44%  |\n| ReadObject_canada        |    11677900 |     8434380 | -27.78%  |\n| ReadObject_citm_catalog  |     6697300 |     5229700 | -21.91%  |\n| ReadObject_github_repo   |     22679.1 |     17036.9 | -24.88%  |\n| ReadObject_twitter       |     2431030 |     2717220 | +11.77%  |\n| ReadFloat64_zero         |           0 |           0 | ~        |\n| ReadFloat64_smallInt     |           2 |           0 | -100.00% |\n| ReadFloat64_negExp       |          16 |           0 | -100.00% |\n| ReadInt64_zero           |           0 |           0 | ~        |\n| ReadInt64_small          |           2 |           0 | -100.00% |\n| ReadInt64_big_negative   |          24 |           0 | -100.00% |\n| DecodeInt64_zero         |           0 |           0 | ~        |\n| DecodeInt64_small        |           2 |           0 | -100.00% |\n| DecodeInt64_big_negative |          24 |           0 | -100.00% |\n| ReadString_short_ascii   |          24 |           5 | -79.17%  |\n| ReadString_medium_ascii  |        2960 |         896 | -69.73%  |\n| ReadString_medium        |        1168 |         384 | -67.12%  |\n| ReadBool                 |           4 |           0 | -100.00% |\n\n### jsoniter\n\n|           name           | jsoniter (ns/op) | rjson (ns/op) |  delta  |\n|--------------------------|-------------:|-------------:|---------|\n| GetRepoValues            |      2565.33 |       2156.9 | -15.92% |\n| DistinctUserIDs          |      1661190 |       743022 | -55.27% |\n| ReadObject_canada        |     73041000 |     32002000 | -56.19% |\n| ReadObject_citm_catalog  |     13473400 |     11808100 | -12.36% |\n| ReadObject_github_repo   |      45984.9 |      30023.4 | -34.71% |\n| ReadObject_twitter       |      6713870 |      4593510 | -31.58% |\n| ReadFloat64_zero         |       107.57 |       14.504 | -86.52% |\n| ReadFloat64_smallInt     |       112.99 |       17.713 | -84.32% |\n| ReadFloat64_negExp       |       149.69 |      27.6944 | -81.50% |\n| ReadInt64_zero           |       14.027 |       12.406 | -11.56% |\n| ReadInt64_small          |        21.35 |       13.144 | -38.44% |\n| ReadInt64_big_negative   |      46.1238 |       27.828 | -39.67% |\n| DecodeInt64_zero         |       99.286 |       13.328 | -86.58% |\n| DecodeInt64_small        |       105.21 |       14.794 | -85.94% |\n| DecodeInt64_big_negative |       134.32 |       29.224 | -78.24% |\n| ReadString_short_ascii   |       50.339 |        39.98 | -20.58% |\n| ReadString_medium_ascii  |       4839.3 |       1872.8 | -61.30% |\n| ReadString_medium        |       2226.4 |       817.07 | -63.30% |\n| ReadBool                 |      24.8511 |       9.0604 | -63.54% |\n\n|           name           | jsoniter (B/op) | rjson (B/op) |  delta   |\n|--------------------------|------------:|------------:|----------|\n| GetRepoValues            |         360 |          16 | -95.56%  |\n| DistinctUserIDs          |      385571 |     4072.67 | -98.94%  |\n| ReadObject_canada        |    17315200 |     8434380 | -51.29%  |\n| ReadObject_citm_catalog  |     5787990 |     5229700 | -9.65%   |\n| ReadObject_github_repo   |     25469.3 |     17036.9 | -33.11%  |\n| ReadObject_twitter       |     2452640 |     2717220 | +10.79%  |\n| ReadFloat64_zero         |          16 |           0 | -100.00% |\n| ReadFloat64_smallInt     |          16 |           0 | -100.00% |\n| ReadFloat64_negExp       |          16 |           0 | -100.00% |\n| ReadInt64_zero           |           0 |           0 | ~        |\n| ReadInt64_small          |           0 |           0 | ~        |\n| ReadInt64_big_negative   |           0 |           0 | ~        |\n| DecodeInt64_zero         |           0 |           0 | ~        |\n| DecodeInt64_small        |           0 |           0 | ~        |\n| DecodeInt64_big_negative |           0 |           0 | ~        |\n| ReadString_short_ascii   |           5 |           5 | ~        |\n| ReadString_medium_ascii  |        2936 |         896 | -69.48%  |\n| ReadString_medium        |        1400 |         384 | -72.57%  |\n| ReadBool                 |           0 |           0 | ~        |\n\n### jsonparser\n\n|          name           | jsonparser (ns/op) | rjson (ns/op) |  delta  |\n|-------------------------|-------------:|-------------:|---------|\n| GetRepoValues           |      2447.22 |       2156.9 | -11.86% |\n| DistinctUserIDs         |      1022040 |       743022 | -27.30% |\n| ReadFloat64_zero        |       43.557 |       14.504 | -66.70% |\n| ReadFloat64_smallInt    |      46.0313 |       17.713 | -61.52% |\n| ReadFloat64_negExp      |      67.8511 |      27.6944 | -59.18% |\n| ReadInt64_zero          |      25.7944 |       12.406 | -51.90% |\n| ReadInt64_small         |      27.1367 |       13.144 | -51.56% |\n| ReadInt64_big_negative  |        59.38 |       27.828 | -53.14% |\n| ReadString_short_ascii  |      49.6714 |        39.98 | -19.51% |\n| ReadString_medium_ascii |      1806.89 |       1872.8 | +3.65%  |\n| ReadString_medium       |       811.09 |       817.07 | ~       |\n| ReadBool                |       30.078 |       9.0604 | -69.88% |\n\n|          name           | jsonparser (B/op) | rjson (B/op) |  delta  |\n|-------------------------|------------:|------------:|---------|\n| GetRepoValues           |          16 |          16 | ~       |\n| DistinctUserIDs         |      6170.9 |     4072.67 | -34.00% |\n| ReadFloat64_zero        |           0 |           0 | ~       |\n| ReadFloat64_smallInt    |           0 |           0 | ~       |\n| ReadFloat64_negExp      |           0 |           0 | ~       |\n| ReadInt64_zero          |           0 |           0 | ~       |\n| ReadInt64_small         |           0 |           0 | ~       |\n| ReadInt64_big_negative  |           0 |           0 | ~       |\n| ReadString_short_ascii  |           5 |           5 | ~       |\n| ReadString_medium_ascii |        1920 |         896 | -53.33% |\n| ReadString_medium       |         768 |         384 | -50.00% |\n| ReadBool                |           0 |           0 | ~       |\n\n### goccyjson\n\n|          name           | goccyjson (ns/op) | rjson (ns/op) |  delta  |\n|-------------------------|-------------:|-------------:|---------|\n| GetRepoValues           |      7488.44 |       2156.9 | -71.20% |\n| ReadObject_canada       |     47965900 |     32002000 | -33.28% |\n| ReadObject_citm_catalog |     15102800 |     11808100 | -21.82% |\n| ReadObject_github_repo  |      43846.8 |      30023.4 | -31.53% |\n| ReadObject_twitter      |     14948500 |      4593510 | -69.27% |\n\n|          name           | goccyjson (B/op) | rjson (B/op) |  delta  |\n|-------------------------|------------:|------------:|---------|\n| GetRepoValues           |        6152 |          16 | -99.74% |\n| ReadObject_canada       |    10980000 |     8434380 | -23.18% |\n| ReadObject_citm_catalog |     7411250 |     5229700 | -29.44% |\n| ReadObject_github_repo  |     26592.9 |     17036.9 | -35.93% |\n| ReadObject_twitter      |     2811040 |     2717220 | -3.34%  |\n\n### simdjson\n\n|          name           | simdjson (ns/op) | rjson (ns/op) |  delta  |\n|-------------------------|-------------:|-------------:|---------|\n| GetRepoValues           |      11510.1 |       2156.9 | -81.26% |\n| DistinctUserIDs         |       992518 |       743022 | -25.14% |\n| ReadObject_canada       |     30483200 |     32002000 | +4.98%  |\n| ReadObject_citm_catalog |     10949300 |     11808100 | +7.84%  |\n| ReadObject_github_repo  |      36584.2 |      30023.4 | -17.93% |\n| ReadObject_twitter      |      4399670 |      4593510 | +4.41%  |\n\n|          name           | simdjson (B/op) | rjson (B/op) |  delta  |\n|-------------------------|------------:|------------:|---------|\n| GetRepoValues           |         712 |          16 | -97.75% |\n| DistinctUserIDs         |     21623.2 |     4072.67 | -81.17% |\n| ReadObject_canada       |    12702400 |     8434380 | -33.60% |\n| ReadObject_citm_catalog |     8301120 |     5229700 | -37.00% |\n| ReadObject_github_repo  |     23330.7 |     17036.9 | -26.98% |\n| ReadObject_twitter      |     2652500 |     2717220 | +2.44%  |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillabides%2Frjson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillabides%2Frjson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillabides%2Frjson/lists"}