From 6343775000acd3eabba0b40e265be57a5d5f8bdd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Nov 2026 08:10:36 +0100 Subject: [PATCH 1/4] build(deps): bump reuse from 6.2.0 to 6.3.0 in /cmake/requirements (#6035) Bumps [reuse](https://github.com/RichardLitt/standard-readme) from 6.2.0 to 6.3.0. - [Release notes](https://github.com/RichardLitt/standard-readme/releases) - [Commits](https://github.com/RichardLitt/standard-readme/commits) --- updated-dependencies: - dependency-name: reuse dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- cmake/requirements/requirements-reuse.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/requirements/requirements-reuse.txt b/cmake/requirements/requirements-reuse.txt index 4666d51bf..90faa7f0e 100644 --- a/cmake/requirements/requirements-reuse.txt +++ b/cmake/requirements/requirements-reuse.txt @@ -1 +1 @@ -reuse==6.2.0 +reuse==6.3.0 From 2c7474affc7d2832490c40418116c1229e07a3c4 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Mon, 9 Nov 2026 08:11:10 +0100 Subject: [PATCH 2/4] =?UTF-8?q?docs:=20add=20the=20blog=20post=20"How=20nl?= =?UTF-8?q?ohmann/json=203.13.0=20got=203=C3=97=20faster"=20(#6022)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: add the blog post "How 3.13.0 got faster" A post for the documentation (Home > Blog) on how 3.13.0 became faster: eight themes with the pull requests behind them, the ideas taken from other libraries, what did not work, how the fast paths are tested, and the compile-time cost. Every number comes from a run on 2026-10-27 (3.12.0 against develop plus the open non-draft PRs, Apple M1 Max) or from the linked PR. - docs/mkdocs/docs/home/blog/how_3_13_0_got_faster.md: the post. - docs/mkdocs/scripts/figures/perf_blog.py: draws its 12 figures (overview, eight timeline panels, the SWAR test, the cliffs, json_view throughput) as inline SVGs in the nj-charts style; data/perf_timeline.csv holds the timeline. - tests/benchmarks/history: history.cpp and history.py time one fixed program against the header of every commit that changed it, interleaved, and write one CSV row per commit with its PR. The timeline of the post comes from it. Signed-off-by: Niels Lohmann * docs: compare json_document with Glaze, sonic, RapidJSON and Rust parsers Extends the comparison in "How 3.13.0 got faster" from yyjson, simdjson and Boost.JSON to eleven engines: sonic-cpp, RapidJSON and Glaze (generic DOM, lazy_json, reading into structs) in C++, sonic-rs, simd-json and serde_json in Rust. Measured on an Apple M1 Max (Apple clang 21, Rust 1.99) and an x86-64 Haswell server (GCC 13, Clang 18). Every engine must return the same values, string bytes and bit-identical number sums before it is timed. The post now answers whether json_document is the fastest parser: it is the fastest document parser at parse+dump everywhere and at parsing on Apple silicon, ties with simdjson's DOM on x86-64, and loses to simdjson On-Demand and Glaze structs when only a few fields are read. tests/benchmarks/json_view/others holds the programs (bench_all.cpp, the Rust crate with its Cargo.lock), summarize.py and the pinned versions and checksums. Signed-off-by: Niels Lohmann * docs: captions, test-file table and figure fixes for the 3.13.0 post - caption every table and figure - describe what makes twitter.json, citm_catalog.json, canada.json and jeopardy.json hard, and what each timeline panel exercises - split the json_view layout figure into the tree and the index, with the example text above; fix the arrows into the string boxes - arrows and a "less is better" axis label in the cliffs figure - name nlohmann/json in the comparison tables and chart - licenses of the adapted code in the thanks section Signed-off-by: Niels Lohmann * docs: byline and licenses for the 3.13.0 post - author and date below the title, styled as .nj-byline; its link gets no external-link icon - the license of every library in the thanks section, checked against each project's license files; credit sonic-rs for QUOTE_TAB, which orjson adapted from it Signed-off-by: Niels Lohmann * docs: dump comparison and split acknowledgments in the 3.13.0 post - a dump workload in bench_all and bench_rs: each engine writes a document parsed beforehand, and every output must read back with bit-identical numbers; an optional argument selects one workload - the post's comparison gains a write table, a throughput chart, a dump row for all three configurations, and the x86-64 cases it loses - the thanks section is split into adapted code and borrowed ideas Signed-off-by: Niels Lohmann * docs: x86-64 dump numbers with #5908's branch-free token digits The dump of canada.json with GCC on x86-64 lost to yyjson by 0.78 because GCC compiled #5908's token-digit selections as branches; 9fad526888 fixed that. The post's x86-64 dump and parse+dump rows of canada.json are now measured with it (GCC 0.95, Clang 0.91 against yyjson), theme 5 tells the story, and "How we measured" says which rows include the commit. Signed-off-by: Niels Lohmann * Compare JSON libraries by use case in the json_view harness bench_all and bench_rs now time use cases (validate, sum, select, edit, minify, write) instead of library functions. Every library may solve a use case in every way it offers; each variant's result is checked, and three malformed inputs give its validation level (full, no UTF-8, partial). summarize.py reports each library's fastest fully validating variant and a faster one at a lower level, as text and as JSON. Signed-off-by: Niels Lohmann * docs: restructure the 3.13.0 post around themes and use cases - deeper technical detail and code in the eight themes; pull request numbers move to the appendix, timeline steps are labelled by theme - comparison with other libraries by use case, as heatmaps per platform, with validation levels and the caveats next to the results - appendix: test files, all 182 suite rows with a histogram, timeline steps, algorithmic fixes, per-file tables, behaviour changes, setup, pull requests by theme Signed-off-by: Niels Lohmann * Measure each library's fastest modes in the json_view harness Address the points of a review from the other libraries' side: - simdjson 5.0.8 (On-Demand structs, key selectors) and Glaze 9.1.0 - number-skipping modes: yyjson and RapidJSON raw numbers, Boost.JSON number_precision::none - reused parsers and allocators for yyjson, RapidJSON and Boost.JSON - Boost.JSON parse_into, Glaze generic with double numbers, and the same struct types for nlohmann, Glaze, simdjson and serde - minified copies of twitter.json and citm_catalog.json - a fourth probe (trailing garbage) and Glaze "(strict)" variants - a new random variant order in every round, as a variant's time could depend on the one before it by up to 15 % on the Mac - --files for other test files and --conformance for JSONTestSuite, with conformance-rs.sh for the Rust program summarize.py also reports each library's best reused variant. Signed-off-by: Niels Lohmann * docs: rerun the library comparison of the 3.13.0 post with fairer rules The figures and Appendix E use the reruns with each library's fastest modes. Skipping number conversion while reading is now allowed for every library; copying number text is still not chosen when writing. The text now says who set the rules, where libraries that check less win select, how minified files change the picture, and that the reused jeopardy.json claim holds with every library reused. A new section covers 19 held-out files and JSONTestSuite, including where json_document loses, and lists what was not measured. Every comparison number was recomputed; Glaze is credited in the intro. Signed-off-by: Niels Lohmann * docs: measure the 3.13.0 post against develop with #5964 and #5908 The suite (Appendix B, the short-version table, the overview and distribution figures) and the timeline endpoint now measure develop d20c4dcd89 with #5964 and #5908 merged. The geometric mean stays 2.9x (2.95); Dump/signed_ints and Dump/unsigned_ints gain 1.5x and 2.1x from #5964; GetVectorDouble/floats drops from 10.3x to 7.0x because the old candidate's suite binary happened to compile that loop faster (a standalone build takes 0.97 ms with both headers). The timeline endpoint is the 10-27 value scaled by the ratio of the new to the old candidate, both measured on 10-30, so that it stays comparable with the other points of the timeline. Signed-off-by: Niels Lohmann * docs: add three figures to the 3.13.0 post - short strings: two overlapping 16-byte loads and stores - eight digits at a time: the three multiplications, lane by lane - validate on the 19 held-out files, per file, Mac and x86-64 The prose the figures replace is trimmed. Signed-off-by: Niels Lohmann * docs: measure the 3.13.0 post against develop with all open pull requests The baseline is now develop 9c349b1d7c with every open non-draft pull request merged, including #5968, #5970, #5971, #5975, #5976, #5978, #5979, #5980, #5981 and #5982. The suite was rerun on 11-01 with every step repeated when the load rose above 5 while it ran; the comparison with other libraries and the held-out files were rerun on 10-31. - suite: 3.0x geometric mean (median 2.9x); Appendix B, the overview and the distribution regenerated - timeline endpoint, Appendix D and the cliffs figure updated - the held-out figure compares json_document with the fastest other library - new paragraphs for the pull requests listed above Signed-off-by: Niels Lohmann * docs: measure the 3.13.0 post against develop with the open pull requests of 11-02 Suite, timeline endpoint, Appendix D and the scalar-run numbers now come from develop b2674a4a2f with #5990, #5991, #5992, #5996, #5997, #5998, #5999 and #6000 merged. The scalar runs are measured against a build without them on develop's code, which no longer checks for a scalar before entering the loop. Signed-off-by: Niels Lohmann * docs: measure the 3.13.0 post against develop with all open pull requests of 11-02 Suite, timeline endpoint, Appendix D and the scalar-run numbers now come from develop b2674a4a2f with #5990-#5992, #5996-#6006 and #6008 merged. With #6008, arrays of one element skip the scalar run, so nested arrays no longer pay for it. The suite ran three rounds per version; the round of 3.12.0 and of 3.13.0 that differed from the other two was dropped, as the setup table says. Signed-off-by: Niels Lohmann * docs: fix the facts the review of the 3.13.0 post found wrong or imprecise Signed-off-by: Niels Lohmann * docs: re-measure the 3.13.0 post and apply the review Measure everything again against develop with the open pull requests of 11-03 (suite, timeline, comparison on the Mac and on x86-64, compile times, stream gap), add the suite on an Intel MacBook Pro as a check, mark the ways that keep number text as "N" in the use-case charts, move the loop-shape box to theme 5, and apply the style and wording fixes of the review. Signed-off-by: Niels Lohmann * docs: make the comparison of the 3.13.0 post fairer Three reviews of "How it compares" (a maintainer audit of the harness, a methodology review, a reader's red team) led to a full rerun on the Mac and x86-64 with simdjson 5.1.1 and new ways in the harness: - in-place parses with the copy made before the timer ("(copy untimed)", never chosen as a library's best) and json_document::parse_copy(); - RapidJSON through StringStream, and with default precision in validate, which reads no number; - BENCH_ONLY takes several prefixes. The post now gives the copy's real cost (11-14 us for twitter.json on the Mac, not 30), what yyjson gains without it, the run-to-run noise, the LTO check, the single-file losses that were missing, and qualifies the headline claim. Every number in the section and Appendix E is recomputed; the NUL-byte remark moved out of the body. Signed-off-by: Niels Lohmann * Format bench_all.cpp with astyle The amalgamation check runs astyle over tests/ and failed on bench_all.cpp. The variant tables keep one variant per line between *INDENT-OFF* and *INDENT-ON*; astyle formats the rest, and the list of use cases becomes a named array so the loop header stays on one line. Signed-off-by: Niels Lohmann * Print the history benchmark's results with a stream Flawfinder flagged the printf in history.cpp (CWE-134), although its format string is a constant. The stream prints the same text, so history.py reads it as before. Signed-off-by: Niels Lohmann * docs: address review comments on the performance blog post - fix wording: "are new", "for each input source", "the strings", "the last zero to seven bytes", "by" Danila Kutenin, "the result of that query" - introduce `json_document` where it first gets a detail, say that the `-mbranches` flag is not used, explain why the position and token bookkeeping overloads are empty, and say that a step's percentage is relative to the time before the step and that a median of 4 is the mean of the two middle values - write percentages without a space before `%` in the post and in the price figure (regenerated) Signed-off-by: Niels Lohmann * docs: wrap the prose of the performance blog post at 120 columns Only line breaks change: the rendered page is identical after whitespace normalization. Signed-off-by: Niels Lohmann * docs: blog post: address the second round of review comments Signed-off-by: Niels Lohmann * docs: blog post: note that Boost.JSON's tree lead comes from its arena The comparison builds Boost.JSON's tree in a monotonic_resource. With its default allocator and precise numbers, boost::json::parse() takes as long as json::parse() on twitter.json, 5% longer on citm_catalog.json and 17% less time on canada.json (M1, C++23 -O3, best of 3 x 30 runs; the arena saves Boost.JSON 28-41%). Signed-off-by: Niels Lohmann * docs: blog post: comparing already passes the depth; copying measured slower without the counter operator== walks the standard containers itself and passes the depth as an argument (#5840). A copy that does the same, inserting element by element, measured 4-16% slower on an M1 Max with Apple clang, so copying keeps the thread_local counter. Signed-off-by: Niels Lohmann * docs: blog post: name every user of the depth counter and every input the document copies The "Bounded recursion" paragraph said only copying and equality for custom containers use the thread_local counter. Converting from another basic_json specialization and the ordering comparisons use it too; equality for the standard containers passes the depth instead. The "Strings stay in the input" bullet named only parse_copy() and an rvalue std::string as owning inputs. Streams, FILE* and other input that is not one contiguous block of bytes are read into an owned buffer as well. Signed-off-by: Niels Lohmann --------- Signed-off-by: Niels Lohmann --- docs/mkdocs/docs/css/brand.css | 26 +- docs/mkdocs/docs/css/fig-charts.css | 44 + .../docs/home/blog/how_3_13_0_got_faster.md | 2794 +++ docs/mkdocs/docs/images/json_view_layout.svg | 10 +- .../docs/images/json_view_layout_index.svg | 148 + .../docs/images/json_view_layout_tree.svg | 49 + docs/mkdocs/docs/images/perf_blog_cliffs.svg | 69 + docs/mkdocs/docs/images/perf_blog_digits.svg | 66 + .../docs/images/perf_blog_distribution.svg | 36 + docs/mkdocs/docs/images/perf_blog_heldout.svg | 102 + docs/mkdocs/docs/images/perf_blog_overlap.svg | 72 + .../mkdocs/docs/images/perf_blog_overview.svg | 87 + docs/mkdocs/docs/images/perf_blog_price.svg | 99 + docs/mkdocs/docs/images/perf_blog_swar.svg | 60 + .../perf_blog_timeline_accept_twitter.svg | 45 + .../images/perf_blog_timeline_dump_canada.svg | 30 + .../perf_blog_timeline_dump_twitter.svg | 37 + .../perf_blog_timeline_from_cbor_twitter.svg | 36 + .../perf_blog_timeline_parse_canada.svg | 44 + .../images/perf_blog_timeline_parse_citm.svg | 45 + ...f_blog_timeline_parse_twitter_ifstream.svg | 28 + .../perf_blog_timeline_to_cbor_twitter.svg | 34 + .../docs/images/perf_blog_usecases_mac.svg | 379 + .../images/perf_blog_usecases_x86-clang.svg | 379 + .../images/perf_blog_usecases_x86-gcc.svg | 374 + .../images/perf_blog_usecases_x86-gcc13.svg | 374 + docs/mkdocs/docs/js/external-links.js | 5 +- docs/mkdocs/docs/js/fig-charts.js | 69 + docs/mkdocs/includes/glossary.md | 6 + docs/mkdocs/mkdocs.yml | 3 + .../figures/data/perf_heldout_validate.json | 3202 ++++ .../scripts/figures/data/perf_suite.csv | 183 + .../scripts/figures/data/perf_timeline.csv | 354 + .../figures/data/perf_usecases_mac.json | 14413 ++++++++++++++++ .../figures/data/perf_usecases_x86-clang.json | 14413 ++++++++++++++++ .../figures/data/perf_usecases_x86-gcc.json | 14413 ++++++++++++++++ .../figures/data/perf_usecases_x86-gcc13.json | 14413 ++++++++++++++++ .../scripts/figures/json_view_layout.py | 49 +- docs/mkdocs/scripts/figures/perf_blog.py | 795 + .../scripts/figures/perf_blog_tables.py | 66 + tests/benchmarks/README.md | 3 + tests/benchmarks/history/README.md | 43 + tests/benchmarks/history/history.cpp | 98 + tests/benchmarks/history/history.py | 151 + tests/benchmarks/json_view/others/README.md | 249 + .../benchmarks/json_view/others/bench_all.cpp | 3562 ++++ .../json_view/others/conformance-rs.sh | 14 + .../json_view/others/rust/Cargo.lock | 627 + .../json_view/others/rust/Cargo.toml | 15 + .../json_view/others/rust/src/main.rs | 968 ++ .../benchmarks/json_view/others/summarize.py | 229 + 51 files changed, 73792 insertions(+), 18 deletions(-) create mode 100644 docs/mkdocs/docs/home/blog/how_3_13_0_got_faster.md create mode 100644 docs/mkdocs/docs/images/json_view_layout_index.svg create mode 100644 docs/mkdocs/docs/images/json_view_layout_tree.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_cliffs.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_digits.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_distribution.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_heldout.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_overlap.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_overview.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_price.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_swar.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_accept_twitter.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_dump_canada.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_dump_twitter.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_from_cbor_twitter.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_parse_canada.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_parse_citm.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_parse_twitter_ifstream.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_timeline_to_cbor_twitter.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_usecases_mac.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_usecases_x86-clang.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc.svg create mode 100644 docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc13.svg create mode 100644 docs/mkdocs/scripts/figures/data/perf_heldout_validate.json create mode 100644 docs/mkdocs/scripts/figures/data/perf_suite.csv create mode 100644 docs/mkdocs/scripts/figures/data/perf_timeline.csv create mode 100644 docs/mkdocs/scripts/figures/data/perf_usecases_mac.json create mode 100644 docs/mkdocs/scripts/figures/data/perf_usecases_x86-clang.json create mode 100644 docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc.json create mode 100644 docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc13.json create mode 100644 docs/mkdocs/scripts/figures/perf_blog.py create mode 100644 docs/mkdocs/scripts/figures/perf_blog_tables.py create mode 100644 tests/benchmarks/history/README.md create mode 100644 tests/benchmarks/history/history.cpp create mode 100755 tests/benchmarks/history/history.py create mode 100644 tests/benchmarks/json_view/others/README.md create mode 100644 tests/benchmarks/json_view/others/bench_all.cpp create mode 100755 tests/benchmarks/json_view/others/conformance-rs.sh create mode 100644 tests/benchmarks/json_view/others/rust/Cargo.lock create mode 100644 tests/benchmarks/json_view/others/rust/Cargo.toml create mode 100644 tests/benchmarks/json_view/others/rust/src/main.rs create mode 100755 tests/benchmarks/json_view/others/summarize.py diff --git a/docs/mkdocs/docs/css/brand.css b/docs/mkdocs/docs/css/brand.css index 8f181f78b..f788b54d6 100644 --- a/docs/mkdocs/docs/css/brand.css +++ b/docs/mkdocs/docs/css/brand.css @@ -759,9 +759,14 @@ body:has(.nj-hero) .md-content { } } +/* blog posts: author and date right below the title */ +.md-typeset .nj-byline { margin: -.8rem 0 1.6rem; font-size: .75rem; color: var(--md-default-fg-color--light); } +.md-typeset .nj-byline a { color: inherit; } +.md-typeset .nj-byline a:hover { color: var(--md-accent-fg-color); } + /* figure captions: "Figure N." in bold, close to the figure, set in from the text column; figures and tables are numbered per page, each with its own counter */ -.md-content__inner { counter-reset: nj-figure nj-table; } +.md-content__inner { counter-reset: nj-figure nj-table nj-listing; } .md-typeset :is(.nj-caption, .nj-charts-caption) { max-width: none; margin: .3rem 2rem 1.5rem; @@ -782,6 +787,25 @@ body:has(.nj-hero) .md-content { .md-typeset :is(.nj-caption, .nj-charts-caption) { margin-inline: 1rem; } } +/* code captions: "Listing N." in bold, directly below the code block, in the figure caption style */ +.md-typeset .nj-code-caption { + max-width: none; + margin: -.4rem 2rem 1.5rem; + font-size: .75rem; + line-height: 1.5; + text-align: left; + color: var(--md-default-fg-color--light); +} +.md-typeset .nj-code-caption::before { + counter-increment: nj-listing; + content: "Listing " counter(nj-listing) ". "; + font-weight: 700; + color: var(--md-default-fg-color); +} +@media screen and (max-width: 44.9375em) { + .md-typeset .nj-code-caption { margin-inline: 1rem; } +} + /* table captions: "Table N." in bold, directly below the table, in the figure caption style */ .md-typeset .nj-table-caption { max-width: none; diff --git a/docs/mkdocs/docs/css/fig-charts.css b/docs/mkdocs/docs/css/fig-charts.css index 742a70bb7..a8ea40ab5 100644 --- a/docs/mkdocs/docs/css/fig-charts.css +++ b/docs/mkdocs/docs/css/fig-charts.css @@ -27,6 +27,10 @@ .md-typeset svg.nj-charts--compile, .md-typeset svg.nj-charts--scaling { max-width: 26rem; } .md-typeset svg.nj-charts--sizes { max-width: 26rem; } +/* home/blog/how_3_13_0_got_faster.md (scripts/figures/perf_blog.py) */ +.md-typeset svg.nj-charts--blog { max-width: 34rem; } +.md-typeset svg.nj-charts--swar { max-width: 34rem; } +.md-typeset svg.nj-charts--timeline { max-width: 22rem; } .nj-charts text { fill: currentColor; font-size: 13px; } .nj-charts .nj-charts-leg { font-size: 13.5px; } @@ -43,10 +47,34 @@ paint-order: stroke; stroke: var(--md-default-bg-color); stroke-width: 4px; stroke-linejoin: round; } .nj-charts .nj-charts-factor { fill: var(--nj-charts-ink2); font-size: 12px; font-weight: 600; text-anchor: middle; } .nj-charts .nj-charts-note { fill: var(--nj-charts-ink2); font-size: 12px; } +/* heatmap cells (perf_blog_usecases_*.svg): green for the fastest, gray around twice the time, red for the slowest; + adjacent steps checked for CVD separation on the light and the slate surface; the numbers are in every cell */ +.md-typeset svg.nj-charts--heat { max-width: 49rem; } +.nj-charts--heat { --nj-heat-0: #3fa557; --nj-heat-1: #8bcc95; --nj-heat-2: #ebeae6; --nj-heat-3: #f2ae9b; + --nj-heat-4: #dc5a43; --nj-heat-ink: #1b1b1b; --nj-heat-ink-strong: #1b1b1b; } +[data-md-color-scheme="slate"] .nj-charts--heat { --nj-heat-0: #3a9d50; --nj-heat-1: #2c6b3a; --nj-heat-2: #33353a; + --nj-heat-3: #8a3f2e; --nj-heat-4: #d95b3a; --nj-heat-ink: #e8e8e6; --nj-heat-ink-strong: #141414; } +.nj-charts .nj-heat-0 { fill: var(--nj-heat-0); } +.nj-charts .nj-heat-1 { fill: var(--nj-heat-1); } +.nj-charts .nj-heat-2 { fill: var(--nj-heat-2); } +.nj-charts .nj-heat-3 { fill: var(--nj-heat-3); } +.nj-charts .nj-heat-4 { fill: var(--nj-heat-4); } +.nj-charts .nj-heat-na { fill: none; stroke: var(--nj-charts-grid); stroke-width: 1; } +.nj-charts .nj-charts-cell { fill: var(--nj-heat-ink); font-size: 12px; font-variant-numeric: tabular-nums; } +.nj-charts :is(.nj-heat-0, .nj-heat-4) ~ .nj-charts-cell { fill: var(--nj-heat-ink-strong); } +.nj-charts .nj-charts-cell--small { font-size: 10.5px; } +.nj-charts .nj-heat-cell { cursor: default; outline: none; } +.nj-charts .nj-heat-cell:is(:hover, :focus-visible, .nj-heat-on) rect { stroke: var(--md-default-fg-color); stroke-width: 1.5; } +.nj-heat-tip { position: absolute; z-index: 5; max-width: 24rem; padding: .5rem .7rem; border-radius: 6px; + background: var(--md-default-bg-color); color: var(--md-default-fg-color); + box-shadow: 0 2px 10px rgba(0, 0, 0, .25); font-size: .68rem; line-height: 1.45; pointer-events: none; } +.nj-heat-tip strong { display: block; margin-bottom: .2rem; } +.nj-heat-tip[hidden] { display: none; } .nj-charts .nj-charts-grid { stroke: var(--nj-charts-grid); stroke-width: 1; } .nj-charts .nj-charts-zero, .nj-charts .nj-charts-axis { stroke: var(--nj-charts-base); stroke-width: 1.5; } .nj-charts .nj-charts-ref { stroke: currentColor; stroke-width: 1.5; } +.nj-charts .nj-charts-head { fill: var(--nj-charts-base); } .nj-charts .nj-charts-c1 { fill: var(--nj-charts-c1); } .nj-charts .nj-charts-c2 { fill: var(--nj-charts-c2); } @@ -140,3 +168,19 @@ /* direct line labels replace the legend */ .nj-charts .nj-charts-name-json { fill: var(--nj-charts-json-c); font-weight: 600; } .nj-charts .nj-charts-name-ojson { fill: var(--nj-charts-ojson-c); font-weight: 600; } + +/* theme badges of home/blog/how_3_13_0_got_faster.md: the number of one of the eight themes, as a digit in a blue + circle, in headings, text, tables and the timeline figures (nj-theme-dot); "U" and other marks are gray */ +.md-typeset .nj-theme { display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; + min-width: 1.45em; height: 1.45em; padding: 0 .3em; border-radius: .725em; vertical-align: .08em; + background: var(--nj-blue); color: var(--md-default-bg-color); font-size: .78em; font-weight: 700; line-height: 1; + font-variant-numeric: tabular-nums; text-decoration: none; } +.md-typeset a.nj-theme:is(:hover, :focus-visible) { background: var(--nj-blue-deep); color: var(--md-default-bg-color); } +.md-typeset .nj-theme--other { background: var(--md-default-fg-color--light); } +.md-typeset h2 .nj-theme { margin-right: .35em; vertical-align: .12em; } +.md-typeset .nj-theme-list > ul { list-style: none; margin-left: 0; } +.md-typeset .nj-theme-list > ul > li { margin-left: 0; padding-left: 2em; text-indent: -2em; } +.md-typeset .nj-theme-list > ul > li > .nj-theme { margin-right: .55em; text-indent: 0; } +.nj-charts .nj-theme-dot { fill: var(--nj-blue); } +.nj-charts .nj-theme-dot--other { fill: var(--nj-charts-ink2); } +.nj-charts .nj-theme-num { fill: var(--md-default-bg-color); font-size: 11px; font-weight: 700; } diff --git a/docs/mkdocs/docs/home/blog/how_3_13_0_got_faster.md b/docs/mkdocs/docs/home/blog/how_3_13_0_got_faster.md new file mode 100644 index 000000000..7f6417e38 --- /dev/null +++ b/docs/mkdocs/docs/home/blog/how_3_13_0_got_faster.md @@ -0,0 +1,2794 @@ +# How nlohmann/json 3.13.0 got 3× faster + + + + + +Since 2016, the [README](https://github.com/nlohmann/json#readme) of this library has said this about speed: + +> There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding +> JSON support with a single header, then this library is the way to go. + +That sentence is still true, but the gap is a lot smaller now. Swap the 3.12.0 header for the 3.13.0 one, recompile, and +the 182 benchmarks of the library's own suite run 3.0× as fast on an Apple M1 Max (geometric mean; 3.1× on an Intel +MacBook Pro from 2016). Not a line of your code changes. Parsing typical documents got 3.1–4.3× as fast, and writing +them 3.0–6.7×. The new version also adds [`json_document`](../../features/json_view.md), a second way to hold a parsed +document, which competes with the fastest C++ and Rust JSON libraries; [How it compares](#how-it-compares) has the +numbers, including where it loses. The price is compile time: two small example programs take 34–62% longer to compile. +A precompiled header or a C++20 module wins back most or all of that in debug builds, and 41–91% of it in optimized +builds ([The price](#the-price)). + +This post is about *how*. Hardly any of the techniques are new: we borrowed them from +[simdjson](https://github.com/simdjson/simdjson), [yyjson](https://github.com/ibireme/yyjson), +[fast_float](https://github.com/fastfloat/fast_float), [Żmij](https://github.com/vitaut/zmij), +[serde_json](https://github.com/serde-rs/json), [Glaze](https://github.com/stephenberry/glaze), +[SQLite](https://sqlite.org), [Boost.JSON](https://github.com/boostorg/json), or a textbook, and we name the source at +each step. What is worth writing about is the *combination*, and the conditions it had to work under. It is a +header-only C++11 library whose 3.x API has been stable for almost nine years, and whose value type is a template over +its string, number, object, array, and allocator types. Input comes from strings, streams, `FILE*`, iterator pairs, wide +strings, and user-defined adapters. Output had to stay the same byte for byte, and error messages had to keep pointing +at the same byte. The few deliberate changes of output are listed in [Appendix F](#f-behavior-changes). + +Every number comes from a benchmark we ran for this post or from the pull request that made the change. The +[appendix](#appendix) describes the test files and the setup, has the full tables behind every chart, and lists the pull +requests behind each theme. + +Fast paths are where bugs hide: they run only for some inputs, so a mistake in one can go unnoticed until the right +input comes along. So every fast path was tested against the slow path it replaces, on millions of generated and fuzzed +inputs. Both had to return the same value, or fail with the same error message at the same byte. [Appendix +J](#j-validation) lists the checks. + +## The short version + +The test files are the three of Milo Yip's [nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark) that +JSON libraries have been measured with for a decade, `twitter.json` (strings, much of it Japanese), `citm_catalog.json` +(many small objects, indented) and `canada.json` (floating-point numbers), plus the 56 MB `jeopardy.json`. [Appendix +A](#a-test-files) says what makes each of them hard. + +
+--8<-- "images/perf_blog_overview.svg" +
+ +

Speedup of 3.13.0 over 3.12.0 for a selection of workloads: the old time divided by the +new one, Google Benchmark suite on an Apple M1 Max, median of 8 runs. More is better; the vertical line at 1× is 3.12.0. +The times are in [Appendix B](#b-3120-against-3130).

+ +The rows above are chosen to show the range. All 182 benchmarks of the suite: + +
+--8<-- "images/perf_blog_distribution.svg" +
+ +

How many of the suite's 182 benchmarks got how much faster. The one below 1× is copying +`citm_catalog.json` without destroying the copy. Every row is in [Appendix B](#b-3120-against-3130).

+ +The median benchmark got 2.9× as fast. On an Intel MacBook Pro (Skylake), the median is 2.9× as well, but parsing +floating-point numbers gained more (`canada.json` 6.1× instead of 3.4×) and writing integers less (`dump()` 1.4–2.3× +instead of 2.2–3.8×); [Appendix B](#b-3120-against-3130) has both columns. Copying and comparing values gained the +least, and the largest gains come from fixing algorithms rather than tuning them (theme +7). + +Eight themes did most of the work: + +
+ +- 1 [Specialize for each input source](#theme-1): a dedicated + reader for each of strings, streams, and `FILE*`, instead of one character at a time for all of them. +- 2 [Work on words, not bytes](#theme-2): 8 bytes per step with + plain integer arithmetic, 16 with SSE2 and NEON. +- 3 [Own the number conversions](#theme-3): no `strtod`, no + locale. +- 4 [Don't do unnecessary work](#theme-4): positions, copies, + and conversions that only matter on an error or for a rare caller. +- 5 [Read the assembly](#theme-5): stack canaries, missed + inlining, aliasing, and branches the compiler chose. +- 6 [Write through a cursor](#theme-6): no virtual call per + character, no allocation per call, no branch per integer. +- 7 [Fix the algorithm first](#theme-7): seven operations were + quadratic or worse. +- 8 [Build a different data structure](#theme-8) when the tree + is the cost. + +
+ +## Where the time went: a timeline + +The suite compares two points. To see which change did what, we compiled one small benchmark against the header of each +of the 351 commits on `develop` that changed `json.hpp` or `json_view.hpp` from 3.12.0 to November 3, and of 3.13.0, and +ran all of them interleaved. Four of the eight workloads we followed: + +- `parse()` of `citm_catalog.json`: the lexer's structure and whitespace handling, and building many small objects; +- `parse()` of `canada.json`: converting text to floating-point numbers; +- `dump()` of `twitter.json`: writing strings; +- `from_cbor()` of `twitter.json`: reading a binary format. + +Each panel shows the speedup over 3.12.0 after each commit, on a logarithmic scale. The badges above the steps name the +theme below that explains them. Moving code around changes a build's speed by a few percent on its own, so only the +larger steps mean something. + +
+
+--8<-- "images/perf_blog_timeline_parse_citm.svg" +
+
+--8<-- "images/perf_blog_timeline_parse_canada.svg" +
+
+--8<-- "images/perf_blog_timeline_dump_twitter.svg" +
+
+--8<-- "images/perf_blog_timeline_from_cbor_twitter.svg" +
+
+ +

Speedup over 3.12.0 after each of the 351 commits that changed the headers up to November +3, from 3.12.0 (left) to 3.13.0 (right). More is better; each point is the median of 4 runs of one build, taken in +random order (with 4 runs, the mean of the two middle ones). The badges are theme numbers; "U" is a UTF-8 check that +came and went. The other four workloads, and every labeled step with its pull request and size, are in [Appendix +C](#c-the-timeline).

+ +A few things stand out. A percentage for a step is relative to the time just before that step, not to the time of +3.12.0: + +- **There is no single big step.** Parsing `citm_catalog.json` got faster in about six visible steps. The largest + removed a buffer that only error messages read, which alone saved 35% of the time. The next ones added the fast paths + for contiguous input, derived positions only on error, and skipped indentation eight bytes at a time; most other + changes moved it by a few percent. +- **Writing had a few large steps.** `dump()` of `twitter.json` lost 70% of its time in one change (a write buffer and + bulk string copies), and `dump()` of `canada.json` 65% in another (Żmij). +- **Regressions happen in between.** A UTF-8 check of every text string in the binary readers, byte by byte, made + `from_cbor()` of `twitter.json` 37% slower for 66 commits, until the readers were made lenient again by default, as in + 3.12.0, with the check as an option. That decision was about the format specifications, which don't require a decoder + to check, not about speed. The cost went with it. It never shipped in a release. +- **The input decides how big a step is.** Removing the error-message buffer measured 8% on the benchmark of its pull + request; on the indented `citm_catalog.json` it saved 35%, because every space of the indentation went through that + buffer. + +## 1 Specialize for each input source { #theme-1 } + +This is the function the 3.12.0 lexer called for **every** byte of input: + +```cpp +char_int_type get() +{ + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != char_traits::eof())) + { + token_string.push_back(char_traits::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; +} +``` + +

The 3.12.0 lexer's `get()`, called for every byte of input.

+ +Two counters in memory, a branch for a pending `unget()`, a call into the input adapter, a `push_back()` into a buffer +that only an error message reads, and a branch for line breaks. The counters are members of the lexer, so the compiler +has to load, add, and store them for every byte. A string or a number then copied each byte a second time into their +token buffer. That is a clean design: one interface works for a `std::string`, an `std::istream`, a `FILE*`, a pair of +iterators over a `std::list`, or a user's own adapter. But it makes every input pay for the most limited one. + +3.13.0 has a dedicated reader for each kind of input and picks it at compile time: + +```mermaid +flowchart LR + src[/"input"/] --> q{{"what is it?"}} + q -->|"std::string, std::vector,
pointers, contiguous ranges"| c["contiguous:
scan the whole buffer"] + q -->|"std::istream"| w["window:
scan the streambuf's get area"] + q -->|"FILE*"| f["one lock per parse,
unlocked reads"] + q -->|"other iterators,
user adapters"| b["byte at a time"] +``` + +

The four kinds of input the lexer distinguishes in 3.13.0. Everything on the fast paths +falls back to the byte path on anything unusual, so the result and the error messages stay the same.

+ +### Detecting the input in C++11 + +An input adapter can declare what it supports as static members (`supports_seek`, `supports_bulk_scan`, and a few more). +The lexer detects them with the detection idiom, so a user's adapter that declares nothing keeps the byte path: + +```cpp +template using detect_supports_seek = decltype(A::supports_seek); +template +constexpr bool input_adapter_supports_seek(std::true_type) { return A::supports_seek; } +template +constexpr bool input_adapter_supports_seek(std::false_type) { return false; } + +static constexpr bool seekable = input_adapter_supports_seek( + is_detected {}); +static constexpr bool lazy_position = seekable; +``` + +

Detecting a static member of the input adapter with the detection idiom: an adapter +that doesn't declare `supports_seek` is not seekable.

+ +Without `if constexpr`, the flags select overloads by tag dispatch, `f(std::integral_constant{})`, +which also keeps MSVC from warning about constant conditions. `get()` still looks like the old one, but its position and +token bookkeeping are now calls. For an adapter that can seek, their `std::true_type` overloads are empty and cost +nothing, because the position and the text of a token are derived only when an error message needs them (theme +4). For a `std::string`, what remains is the branch on +`next_unget` and the adapter's bounds check and pointer increment. + +### Contiguous input + +Containers with `data()` and `size()` over single-byte elements now become a pointer range in every C++ standard, not +only with C++20's contiguous iterators. `data()` and `size()` alone would be duck typing, so the trait also requires the +container's `value_type` to be the element type behind `data()`. A type whose `size()` counts something else keeps the +iterator path: slower, but correct. On a pointer range, the strings, the numbers and the indentation after a line break +are scanned in bulk (themes 2 and +3). Every fast path defers to the byte path on anything +malformed, so error messages and byte positions stay the same, with one deliberate correction (the column after a number +at the end of a line). [Appendix J](#j-validation) describes how that was checked. + +### Streams + +An `std::istream` already has a buffer: the get area of its `streambuf`, `gptr()` to `egptr()`. The lexer now scans that +window in bulk and keeps the current token as a pointer into it. Those are protected members of `std::streambuf`, and +reaching them takes neither a cast nor a derived object: + +```cpp +struct streambuf_access : std::streambuf +{ + static const char* get_ptr(std::streambuf* s) { return (s->*(&streambuf_access::gptr))(); } + static const char* get_end(std::streambuf* s) { return (s->*(&streambuf_access::egptr))(); } + static void bump(std::streambuf* s, int n) { (s->*(&streambuf_access::gbump))(n); } +}; +``` + +

Reaching the protected get area of any `std::streambuf` through pointers to members, +without a cast.

+ +A derived class may name a protected member of its base in a pointer to member, as long as it qualifies the name with +its own class. The resulting pointer has the type `char* (std::streambuf::*)() const`, and access is checked when the +name is used, not when the pointer is called, so it works on any `std::streambuf*`. The common alternative, +`static_cast(sb)->gptr()`, is undefined behavior, because the object is not a `streambuf_access`. + +Before the stream refills its get area, the adapter appends the part of the current token that is in it to a carry +buffer; only an error message ever reads the token text back. Nothing is read ahead: the adapter advances `gptr()` by +exactly what the lexer consumes, so the stream is left where it was before. On an M1 Max, parsing from an +`std::ifstream` took 1.8–2.5× as long as reading the file into a string and parsing that, in the pull request's +measurement before the change; now it takes just 9–16% longer. + +### `FILE*` + +`std::fgetc` locks the `FILE` on every call. 3.13.0 locks it once per parse (`flockfile`, then `getc_unlocked`; +`_lock_file` and `_fgetc_nolock` with the Microsoft runtime). `flockfile` is recursive, so the binary readers' `fread()` +and a SAX handler's own `ftell()` keep working. Whereas parsing `citm_catalog.json` from a `FILE*` got 4.4× as fast on +macOS in the pull request's measurement, with glibc it got only 1.1–1.3× as fast, because glibc's per-call locking is +already cheap. Two details: MemorySanitizer builds keep `fgetc`, because glibc's inline `getc_unlocked` reads a buffer +that uninstrumented glibc filled. And a SAX handler that waits for another thread using the same `FILE` now deadlocks, +as the documentation says. Both paths can be switched off, with +[`JSON_DISABLE_STREAM_BULK_SCAN`](../../api/macros/json_disable_stream_bulk_scan.md) and +[`JSON_DISABLE_UNLOCKED_FILE_IO`](../../api/macros/json_disable_unlocked_file_io.md). + +## 2 Work on words, not bytes { #theme-2 } + +The core of a JSON lexer is "copy bytes until something interesting happens". Theme 1 gave it ranges of bytes. This +theme reads them a word at a time. + +### Eight bytes in a word + +In a string, the interesting bytes are the closing quote, a backslash, a control character, and anything above 0x7F +(UTF-8). This test checks eight bytes at once with ordinary 64-bit arithmetic: + +```cpp +// return a word whose high bit is set in every byte of v that needs +// individual handling; zero if all 8 bytes can be copied as they are +inline std::uint64_t swar_string_special(std::uint64_t v) noexcept +{ + constexpr std::uint64_t ones = 0x0101010101010101ull; + constexpr std::uint64_t high = 0x8080808080808080ull; + const std::uint64_t q = v ^ 0x2222222222222222ull; // '"' + const std::uint64_t b = v ^ 0x5C5C5C5C5C5C5C5Cull; // '\\' + const std::uint64_t has_quote = (q - ones) & ~q & high; + const std::uint64_t has_backslash = (b - ones) & ~b & high; + const std::uint64_t has_control = (v - 0x2020202020202020ull) & ~v & high; // < 0x20 + const std::uint64_t has_non_ascii = v & high; // >= 0x80 + return has_quote | has_backslash | has_control | has_non_ascii; +} +``` + +

The eight-byte test of the string scanner, in portable C++11.

+ +XOR with the quote turns every quote byte into zero, and `(x - 0x01…01) & ~x & 0x80…80` sets the high bit of the bytes +that were zero: the "determine if a word has a zero byte" trick from Sean Eron Anderson's [Bit Twiddling +Hacks](https://graphics.stanford.edu/~seander/bithacks.html#ZeroInWord). The subtraction's borrow runs only upwards, so +it can flag a byte *after* a real hit, but never one before it: the lowest flag is always right, and the number of +trailing zero bits divided by eight is the index of the first special byte. + +
+--8<-- "images/perf_blog_swar.svg" +
+ +

`swar_string_special()` on the last eight bytes of `"twitter",`: one word in, one flag +out, and the count of trailing zero bits says how many bytes can be copied before the quote.

+ +Two details make this portable C++11. The word is loaded with `std::memcpy`, which compilers turn into one load and +which, unlike a `reinterpret_cast`, doesn't break the aliasing rules. And the load always produces the bytes in +little-endian order, so the first byte of the text is the lowest byte of the word everywhere; a big-endian target +assembles the word from bytes, which compilers fold into a load and a byte swap. Every loop checks that eight bytes +remain before it loads, and finishes the remaining one to seven bytes one at a time, so nothing is read past the +input. + +The same kind of word test now runs in several places: + +- **Strings in the lexer,** including runs of well-formed multi-byte UTF-8, which are validated one sequence after the + other without going back to the byte loop. +- **Numbers,** eight digits per step (theme 3). +- **Indentation.** After a newline, `word ^ 0x2020…20` is zero for eight spaces; the first non-zero byte ends the + indentation, and its trailing-zero count says how many spaces of the last word to skip as well. The idea is from + [Glaze](https://github.com/stephenberry/glaze)'s `skip_matching_ws`, which compares with the previous line's + indentation; comparing with spaces needs no state and works for any indentation width. A version that skipped only + whole words validated 5–12% slower and gave nothing on two-space indentation, where the runs are often shorter than a + word. With four-space indentation, validating `citm_catalog.json` got 22–30% faster. +- **[`dump()`](../../api/basic_json/dump.md),** for runs of characters that need no escaping, with and without + [`ensure_ascii`](../../api/basic_json/dump.md#parameters). +- **The binary formats,** for the zero byte that ends a BSON key, and for the UTF-8 check of strings with + `error_handler_t::strict`. On the M1, reading `canada.json` from BSON got 14% faster, and writing `twitter.json` as + UTF-8-checked CBOR 14%. + +### 16 bytes with SSE2 and NEON + +Where a vector unit is part of the baseline instruction set (SSE2 on x86-64, NEON on 64-bit Arm), the string paths take +16 bytes per step. Two well-known details are worth repeating. A signed comparison `byte < 0x20` catches control +characters *and* every byte from 0x80, because those are negative as `int8_t`, so four classes of bytes take three +comparisons. And NEON has no equivalent of x86's `pmovmskb`, which turns a vector of comparison results into a bit mask. +The usual replacement, by [Danila +Kutenin](https://developer.arm.com/community/arm-community-blogs/b/servers-and-cloud-computing-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon), +shifts each 16-bit lane right by four and narrows it to eight bits, which leaves four bits per input byte in a 64-bit +integer: + +```cpp +while (e - p >= 16) +{ + const uint8x16_t in = vld1q_u8(p); + const uint8x16_t quote_or_backslash = vorrq_u8(vceqq_u8(in, vdupq_n_u8('"')), + vceqq_u8(in, vdupq_n_u8('\\'))); + const uint8x16_t special = vorrq_u8(quote_or_backslash, + vcltq_s8(vreinterpretq_s8_u8(in), vdupq_n_s8(0x20))); + // each byte of special is 0x00 or 0xFF; shifting each 16-bit lane right by 4 and + // keeping its low byte leaves 4 bits per input byte + const uint8x8_t nibbles = vshrn_n_u16(vreinterpretq_u16_u8(special), 4); + const std::uint64_t bits = vget_lane_u64(vreinterpret_u64_u8(nibbles), 0); + if (bits != 0) + { + return p + (count_trailing_zeros(bits) >> 2u); // four bits per byte + } + p += 16; +} +``` + +

The NEON string scan: three comparisons for four classes of bytes, and a narrowing +shift in place of `pmovmskb`.

+ +On `twitter.json`, the vector scan made `json::parse()` 5% faster with Clang and 9% with GCC on an M1 Max; on long +strings, 19–24%. It did not win from the first byte. On the M1, starting with NEON made short strings 3–4% slower and +the rest of the lexer bigger. So ARM runs four 8-byte words first and keeps the vector loop out of line, while x86-64 +runs one word first. Inlining the vector code into the lexer cost 5% of validating `jeopardy.json` on the M1, although +no string of that file is long enough to reach it: the scan function, which runs once per token, saved more registers +and needed a stack slot. + +[`json_document`](../../features/json_view.md), the new document type of `json_view.hpp`, also skips the digits after a +decimal point 16 bytes at a time with SSE2: a compare and a bit mask instead of a branch per digit, about 33% of the +instructions for a 12-digit fraction. Parsing `canada.json` got 22% faster on x86-64, a file of 10,000 floats 28–32%. + +One row got slower: with GCC 16, `citm_catalog.json` took 8% longer with the same number of instructions, because more +of its hot jumps now crossed a 32-byte boundary. The microcode fix for Intel's JCC erratum makes that slow on our +server. Assembling with `-Wa,-mbranches-within-32B-boundaries` shrinks the loss to about 4%, but a header-only library +can't choose the assembler flags of the programs that include it, so we left the code as it is, and all numbers in this +post are measured without that flag. + +### Validating UTF-8 16 bytes at a time + +Validating UTF-8 16 bytes at a time uses [simdjson](https://github.com/simdjson/simdjson)'s "lookup4" algorithm ([Keiser +and Lemire, 2021](https://arxiv.org/abs/2010.03090)): three 16-entry tables, indexed by nibbles of a byte and of the +byte before it, each give the set of errors that nibble allows, and a pair of bytes is invalid if all three sets share +an error. It needs `pshufb`, which is SSSE3 and not part of baseline x86-64. The function is compiled with +`__attribute__((target("ssse3")))`, out of line, and called only if `cpuid` says so. The result of that query is cached +in a constant-initialized `static std::atomic`, so that neither a guarded local static nor a global constructor is +needed; threads that ask at the same time all store the same answer. On an error, the code backs up to the start of the +sequence and lets the byte path produce the error message. [`JSON_NO_SIMD`](../../api/macros/json_no_simd.md) turns all +vector code off. + +### Short strings + +Short strings are a different problem. Most keys and many values are short: `citm_catalog.json` averages 8 bytes per +string and `jeopardy.json` 14. For them, setting up a scan costs more than the scan. The first step took the idea of +[SQLite](https://sqlite.org/src/file/src/json.c)'s `jsonAppendString()`: check each byte of a string of up to 32 bytes +against a 256-entry table of bytes that can be written unchanged, and copy the string in one go if they all pass. 32 +bytes was the best threshold on the M1; 16 gained less, and 64 lost again. The second step replaced the table, where +SSE2 or NEON is available, with overlapping loads, the trick that `memcpy` implementations such as glibc's use for short +copies: + +```cpp +// 16 <= n <= 32: two loads that overlap in the middle cover the whole string +const uint8x16_t a = vld1q_u8(p); +const uint8x16_t b = vld1q_u8(p + n - 16); +const uint8x16_t special = /* '"', '\\', < 0x20 or 0x7F, in a or in b */; +if (vmaxvq_u8(special) != 0) +{ + return false; // nothing has been written yet; take the general path +} +vst1q_u8(d, a); +vst1q_u8(d + n - 16, b); // the two stores overlap too, with the same bytes +``` + +

Writing a string of 16–32 bytes with two overlapping loads and stores (NEON).

+ +
+--8<-- "images/perf_blog_overlap.svg" +
+ +

The code above on `profile_link_color`, a key of `twitter.json`.

+ +On `twitter.json`, this cut the instructions of `dump()` by 21%. Shorter strings use the same trick with two overlapping +8-, 4-, or 2-byte loads, so no `memcpy` with a length known only at run time is left. + +### Escapes from a table + +When the scanner stops at a quote, a backslash, or a control character, the writer copies its escape sequence from a +table of 8-byte rows, padded with zeros, with the length in the last byte: + +```cpp +{{'\\', 'u', '0', '0', '0', '0', 0, 6}}, // 0x00 +{{'\\', 'n', 0, 0, 0, 0, 0, 2}}, // 0x0A +{{'\\', '"', 0, 0, 0, 0, 0, 2}}, // 0x22 + +std::memcpy(write_buffer.data() + write_buffer_pos, escape.data(), 8); // always 8 bytes +write_buffer_pos += escape[7]; // keep only the real length +``` + +

Three rows of the escape table, and how a row is written: always 8 bytes, then the +real length.

+ +One 8-byte store and one add, with no branch on the length; the padding lies behind the write position and is +overwritten by the next write. The writer makes sure that 8 bytes are free before it copies. The idea is from +[orjson](https://github.com/ijl/orjson)'s `QUOTE_TAB`, which orjson took from +[sonic-rs](https://github.com/cloudwego/sonic-rs). Although dumping 100,000 log lines full of `\n`, `\t`, and quotes got +23% faster on an M1 Max, most of that came from writing straight into the write buffer instead of an intermediate one. +The table alone gained 2–7%. + +## 3 Own the number conversions { #theme-3 } + +3.12.0 converted every floating-point number with `strtod` and every integer with `strtoull` or `strtoll`, after copying +the token into a buffer. `strtod` is correct, but general: it consults the locale for the decimal point, sets `errno`, +and handles any length of input. `std::from_chars` would avoid the locale, but it doesn't exist before C++17, and libc++ +has its floating-point overloads without defining `__cpp_lib_to_chars`, so macOS builds could not detect it. + +`canada.json`, a GeoJSON file of 111,126 numbers, shows what that costs. 108,528 of its numbers have 16 or 17 +significant digits, like `-65.613616999999977`. The classic shortcut is Clinger's fast path ([Clinger, +1990](https://doi.org/10.1145/93542.93557)): write the number as its digits `w` times a power of ten, convert `w` to a +`double`, and multiply or divide it by that power of ten. If both are exact as `double`, that is, `w` is at most 2⁵³ +(9,007,199,254,740,992) and the power at most 10²², the operation rounds only once, and the result is the correctly +rounded `double`. For most of `canada.json`'s numbers, `w` doesn't fit into 53 bits. + +3.13.0 converts `float` and `double` numbers itself, without the C library and without the locale: + +```mermaid +flowchart TB + t["number token"] --> d{{"at most 19
significant digits?"}} + d -->|"yes"| c{{"digits and power of ten
exact as double?"}} + c -->|"yes"| cl["Clinger's fast path:
one multiplication or division"] + c -->|"no"| el["Eisel-Lemire:
128-bit integer arithmetic"] + d -->|"no"| el2["Eisel-Lemire on the first 19 digits"] + el2 --> amb{{"w and w+1 round
to the same double?"}} + amb -->|"yes"| done(["done"]) + amb -->|"no"| big["compare with the exact midpoint
(big-integer arithmetic)"] +``` + +

How 3.13.0 converts a decimal token to a `double`. Of `canada.json`'s 111,080 +floating-point numbers, 9,742 take Clinger's fast path and 101,338 Eisel-Lemire; none has more than 19 digits.

+ +### Eight digits at a time + +On contiguous input and stream windows, the lexer accumulates the value while it validates the token, so the digits are +read once. The core is [fast_float](https://github.com/fastfloat/fast_float)'s eight-digit conversion: three +multiplications instead of eight. + +```cpp +// v: eight ASCII digits, the first digit in the lowest byte +std::uint32_t parse_eight_digits(std::uint64_t v) noexcept +{ + v = ((v & 0x0F0F0F0F0F0F0F0Fu) * 2561u) >> 8u; // 2561 = 10 * 2^8 + 1 + v = ((v & 0x00FF00FF00FF00FFu) * 6553601u) >> 16u; // 6553601 = 100 * 2^16 + 1 + v = ((v & 0x0000FFFF0000FFFFu) * 42949672960001u) >> 32u; // 10000 * 2^32 + 1 + return static_cast(v); +} +``` + +

fast_float's conversion of eight ASCII digits to their value, with three +multiplications.

+ +
+--8<-- "images/perf_blog_digits.svg" +
+ +

`parse_eight_digits()` on `"12345678"`: multiplying by `10·2⁸ + 1` adds ten times each +byte to the byte above it, and the shift and the next mask keep every second lane.

+ +Checking that all eight bytes are digits takes one more expression. A digit is a byte from 0x30 to 0x39. In hexadecimal, +its upper half is 3 and its lower half is at most 9. Adding 6 tests the lower half: 0x39 + 6 = 0x3F still has the upper +half 3, but 0x3A + 6 = 0x40 carries into it. So a byte is a digit exactly if its upper half is 3 both before and after +adding 6, and with masks, that is one comparison for all eight bytes. An integer of up to 18 digits always fits into an +`int64_t`, and 19 digits into a `uint64_t`, so they need no overflow check. + +### Clinger's fast path + +Clinger's fast path is guarded by more than the two conditions above: + +```cpp +#if !defined(FLT_EVAL_METHOD) || FLT_EVAL_METHOD == 0 +if (exponent >= -22 && exponent <= 22 && w <= (std::uint64_t{1} << 53)) +{ + double value = static_cast(w); + value = exponent < 0 ? value / exact_power_of_ten(-exponent) + : value * exact_power_of_ten(exponent); + return negative ? -value : value; +} +#endif +``` + +

Clinger's fast path: one correctly rounded multiplication or division, only without +x87 extended precision.

+ +With x87 arithmetic (`FLT_EVAL_METHOD != 0`), the intermediate result has extended precision and is rounded twice, so +those targets skip the fast path and take the integer-only route below. + +### Eisel-Lemire + +[Eisel-Lemire](https://arxiv.org/abs/2101.11408), adapted from fast_float's `compute_float`, handles everything else +with integers only: it multiplies the digits with a 128-bit approximation of `5^q` from a table and takes the mantissa +from the top of the product. For up to 19 digits, that always suffices ([Mushtak and Lemire, +2023](https://arxiv.org/abs/2212.06644)). Longer numbers, rare in JSON, are bracketed by their first 19 digits and that +plus one; only if the two round differently are all digits compared with the exact midpoint. [Appendix +I](#i-details-of-the-themes) has the details. Because it is integer arithmetic, the result no longer depends on the C +locale. (JSON always uses `.`, but `strtod` expects the locale's decimal separator, so 3.12.0 replaced the `.` before +calling it, which [failed for separators longer than one byte][5660].) [Appendix J](#j-validation) describes how the +conversion was checked against `strtod`. + +### Writing: Żmij + +For output, 3.12.0 used [Grisu2](https://doi.org/10.1145/1806596.1806623), which is fast but sometimes writes a 17th +digit where 16 suffice. 3.13.0 ports [Żmij](https://github.com/vitaut/zmij) by Victor Zverovich to C++11. It writes the +shortest decimal that reads back as the same `double`, and the closest one if there are several. Its digit conversion, +by Xiang JunBo, is the parser's divide-by-multiplying idea run backwards on all lanes of a word at once ([Appendix +I](#i-details-of-the-themes) shows it), and with SSE2 or NEON, Żmij's vector code (the NEON version by Dougall Johnson, +the SSE version by Tobias Schlüter) converts all 16 digits in one vector register. + +One stall turned up on the way. To make room for the decimal point, the code first wrote all 16 digits, as two 8-byte +stores, and then moved the digits after the point one byte to the right: it loaded them and stored them one byte +further. That load came right after the two stores and read part of each. A CPU can hand a load the data of one store +that hasn't reached the cache yet, but it can't combine two, so the load had to wait until both stores were written. The +commit measured that wait as about 25% of the time to write a `double`. The vector version avoids memory: it keeps the +digits in a register, moves the ones after the point up by one byte there, puts `'.'` into the gap, and stores all 16 +bytes once. + +In the pull request's measurement, `dump()` of `canada.json` got about 3× as fast, on an M1 Max as well as on an x86-64 +server with GCC and Clang. The changed output is listed in [Appendix F](#f-behavior-changes): 0.14% of random `double`s +are written differently, all of them with the same or fewer digits, and all of them read back as the same value. + +## 4 Don't do unnecessary work { #theme-4 } + +A lot of what the 3.12.0 parser did was correct, cheap per call, and read by nobody in the common case. + +### The token buffer + +The old `get()` of theme 1 pushed every character into +`token_string`, a buffer that only the "last read" part of an error message uses. For seekable input, the lexer now +remembers the offset where the token started and copies the text from the input if an error happens. This is the 35% +step of the timeline: in the indented `citm_catalog.json`, every space of the indentation went through the buffer. For +streams, the carry buffer of theme 1 does the same job; the +per-character copy had been about 20% of what was left of a stream parse. + +[`accept()`](../../api/basic_json/accept.md) went one step further: it doesn't copy strings and keys at all. The lexer +and the parser take a template parameter that drops values, so `accept()` gets its own instantiation without the copies. +That made validating `twitter.json` 11–13% faster on x86-64, and 19 files of simdjson's examples 12% by geometric mean. + +### Positions only on error + +For input that can be seeked, the lexer no longer counts lines and columns. The byte offset is the distance from the +start, and lines and columns are recomputed only when an error message needs them: + +```cpp +std::size_t count_consumed_lines(std::size_t last_index, std::size_t& line_start) const +{ + const auto to = std::next(begin, last_index); + using reverse_it = std::reverse_iterator; + const auto last_newline = std::find(reverse_it(to), reverse_it(begin), '\n'); + line_start = std::distance(begin, last_newline.base()); // column: offset - line_start + return std::count(begin, last_newline.base(), '\n'); // line: newlines before it +} +``` + +

Line and column of an error, computed from the byte offset only when an error +message needs them.

+ +That is linear in the input, but only an error pays for it. It is what [serde_json's slice +reader](https://github.com/serde-rs/json/blob/master/src/read.rs) does (`position_of_index()` with `memrchr` and a +newline count). A pending `unget()` is a flag, and the offset subtracts one for it, so `unget()` does no position work +at all. Measuring the two parts of the old `get()` separately on an M1 showed that the newline branch cost more than the +counters: removing only the branch saved 16% of validating an indented `twitter.json`, removing only the increments 4%. +Parsing `citm_catalog.json` got 12% faster. + +### The text of float tokens + +The lexer copied every float token into a buffer so that a SAX handler's `number_float(val, s)` could see the original +text: an out-of-line `std::string::append` per float, about 10% of parsing `canada.json`. The handlers behind +[`parse()`](../../api/basic_json/parse.md) and [`accept()`](../../api/basic_json/accept.md) never look at it. The parser +now recognizes them by their exact type: + +```cpp +template struct sax_ignores_number_text : std::false_type {}; +template +struct sax_ignores_number_text> : std::true_type {}; +template +struct sax_ignores_number_text> : std::true_type {}; +// json_sax_dom_callback_parser likewise + +// at the call site +sax->number_float(res, number_float_text(sax)); // an empty string for the handlers above +``` + +

Recognizing the library's own SAX handlers, which never read the text of a float +token.

+ +A class derived from `json_sax_dom_parser` does not match the specialization, so it keeps getting the exact text. For +every other handler, the lexer only records a pointer to the token and its length, and copies on the first +`get_string()`. That is safe for contiguous input, which has to outlive the parse anyway; in a stream's window, the next +refill could overwrite the text, so there the copy is made at once. The first version put the "is there pending text?" +check into the `get_string()` that keys and strings use too, and lost 2–3% on string-heavy input. Keys and strings now +call a separate function without the check. Parsing `canada.json` got 9–11% faster. + +### A copy that should have been a move + +[`from_cbor()`](../../api/basic_json/from_cbor.md) and the other binary readers ended like this: + +```cpp +return res ? result : basic_json(value_t::discarded); // 3.12.0 +``` + +

The end of the 3.12.0 binary readers: the conditional operator copies `result`.

+ +`result` is a local, but the conditional operator's operand is an lvalue expression, and the implicit move on `return` +applies only to a returned name. So every successfully parsed value was deep-copied once and then destroyed. 3.13.0 +assigns `discarded` to `result` on failure and returns `result` by name. Decoding a 2 MB CBOR document went from 26.99 +ms to 14.65 ms. The copy was also a stack-overflow risk: the copy constructor recursed once per level, for a value the +reader had already accepted. + +### `ordered_json` growth + +[`ordered_json`](../../api/ordered_json.md) stores its members in a `std::vector>`. +Because the key is `const`, the pair's "move" constructor copies the key and can throw. When `std::vector` grows, it +uses `std::move_if_noexcept` to keep the strong exception guarantee, so for this element type it copies every element, +including the whole subtree behind every value. The library now grows the storage itself, in two phases: + +```cpp +// phase 1, may throw but only touches tmp: +// copy the keys, default-construct the values, add the new element +Container tmp(this->get_allocator()); +tmp.reserve((std::max)(size_type{1}, 2 * this->size())); +for (const auto& element : *this) + tmp.emplace_back(std::piecewise_construct, std::forward_as_tuple(element.first), + std::forward_as_tuple()); +tmp.emplace_back(std::forward(args)...); +// phase 2, cannot throw: move-assign the values, adopt the storage +auto it = tmp.begin(); +for (auto& element : *this) { it->second = std::move(element.second); ++it; } +Container::swap(tmp); +``` + +

How `ordered_map` grows its storage in two phases, without copying the values.

+ +The new element is constructed before any value is moved, so `j.emplace("new", std::move(j["old"]))` still works, and +the strong guarantee holds without a `try`, which matters because the library also builds with `-fno-exceptions`. +Parsing `twitter.json` into `ordered_json` needs 33% of the allocations and, in the pull request's measurement, about +50% of the time. Unfortunately, compilers with the EDG front end (Intel's icpc, NVIDIA's nvc++) consider that pair's +move constructor `noexcept`. There, the vector already "moves", the new path is not taken, and a key copy that throws +during growth calls `std::terminate`. + +### Containers built one element at a time + +The DOM parser used to `push_back` every element into its array, and insert every member into its object as soon as it +was parsed. Now all open arrays share one stack of elements; when an array of up to 16 elements ends, it is constructed +at its exact size from a range of move iterators, one allocation. `ordered_json` objects collect up to 32 members the +same way, with a linear duplicate-key check over that short slice, and larger objects get a side table of hashes for +that check from 64 members on. An `ordered_json` object with very many members went from 43 million instructions to 1.9 +million, and `ordered_json` now parses 1–15% *faster* than `json` in our suite, since `json`'s `std::map` still +allocates a node per member. The binary readers know their sizes up front and use a separate handler without the stack; +sharing it had made them 5–12% slower with GCC. + +The binary readers also stopped taking every element through their general dispatch. When an array opens, the CBOR and +MessagePack readers read the numbers, booleans, and nulls that follow in one loop, and the UBJSON and BJData readers do +the same for arrays with a type marker. Reading an array of a million integers from CBOR or MessagePack got 42–47% +faster, and `canada.json` 10%. Arrays of one element skip the loop: in 1,000 arrays nested in each other, each entered +it only to find another array, which cost 6–8%. Now the loop costs nested arrays nothing measurable, and costs 100,000 +arrays `[1,2]` at most 1.5%. + +### Smaller ones + +The parser checks for the expected `:` or `,` before it falls into the lexer's general token switch (−7% on +`citm_catalog.json`, a contribution by [@mvanslobbe](https://github.com/mvanslobbe)), and +[`to_cbor()`](../../api/basic_json/to_cbor.md) no longer creates a temporary `basic_json` for every object key it writes +(−55% on `twitter.json`, by [@alexprabhat99](https://github.com/alexprabhat99)). + +!!! note "The same idea, measured twice" + + The SAX interface hands the lexer's buffer to the handler as `string_t&` and allows it to be moved from; the lexer + starts each token with an empty buffer anyway. In September, moving string values instead of copying them saved + 2–3%. We measured moving keys too, and dropped it. The buffer is sized for the longest token so far, and keys are + short while values are long. So moving a key hands a large buffer to a short string, and the next value has to grow + a new one: 11.9% slower on 40,000 short strings. In October, with much of the lexer around it rewritten, moving keys + was measured again: `parse()` of `twitter.json` got 3.3% faster with Clang and 5.0% with GCC, so keys are moved now + too. An idea that lost once is worth measuring again when the code around it changes. + +## 5 Read the assembly { #theme-5 } + +A good part of 3.13.0 came from reading what the compiler made of the hot loops, with Clang's `-Rpass-missed=inline`, +profiles, and instruction counts. None of the following shows up in the source as a problem. + +### A stack canary on every token + +The function that dispatches on the first byte of a token built the expected text of `true`, `false`, and `null` in +local arrays: + +```cpp +case 't': // 3.12.0 +{ + std::array true_literal = {{'t', 'r', 'u', 'e'}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); +} +``` + +

The 3.12.0 lexer's dispatch for `true`: a local array, and with it a stack canary.

+ +With `-fstack-protector-strong`, which Ubuntu's GCC enables by default and many distributions use for their packages, +*any* local array gives a function a stack canary: the prologue loads a secret (on x86-64 Linux from thread-local +storage) and stores it next to the locals, and every return compares it. Even worse, that happens on every call, also +for the `[`, `,` and `"` tokens that never touch the array. The canary's load alone was 11% of the function's samples. +(Plain `-fstack-protector` only protects character arrays of at least 8 bytes, so it didn't trigger here.) Now the +literal is a string literal whose length is a template parameter, compared on contiguous input with one `memcmp` of +constant size, and the dispatch has no canary and no array on the stack: + +```cpp +case 't': return scan_literal("rue", token_type::literal_true); + +template +JSON_HEDLEY_NEVER_INLINE token_type scan_literal(const char (&rest)[N], token_type return_type); +``` + +

The 3.13.0 dispatch: a string literal whose length is a template parameter.

+ +`scan_literal()` is deliberately out of line: inlined, it made Clang's dispatch grow from 233 to 278 instructions, and +slower. Together with the next change, validating `canada.json` got 10.5% faster with GCC on x86-64. The same change +replaced the parser's `std::vector` nesting stack, whose `push_back` GCC called out of line, with +`std::vector`; a bit vector saves memory that a stack of nesting levels doesn't need. + +### Exceptions that block inlining + +A function that can throw builds the message, allocates the exception, and needs a landing pad for every temporary, even +if the throw never happens: + +```cpp +if (JSON_HEDLEY_LIKELY(ptr != nullptr)) { return *ptr; } // 3.12.0, get_ref() +JSON_THROW(type_error::create(303, detail::concat( + "incompatible ReferenceType for get_ref, actual type is ", obj.type_name()), &obj)); +``` + +

The throw in 3.12.0's `get_ref()`: building the message makes the function too big +to inline.

+ +That made [`get_ref()`](../../api/basic_json/get_ref.md), [`operator[]`](../../api/basic_json/operator%5B%5D.md), +[`at()`](../../api/basic_json/at.md) and the iterator operators too big to inline, and gave callers large frames (192 +bytes for `get_ref()` with GCC). 3.13.0 moves construction and `throw` into helpers marked `[[noreturn]]` and never +inlined, so the hot function keeps a test and a call: + +```cpp +if (JSON_HEDLEY_LIKELY(ptr != nullptr)) { return *ptr; } +throw_incompatible_reference_type(obj); // JSON_HEDLEY_NO_RETURN JSON_HEDLEY_NEVER_INLINE +``` + +

The same function in 3.13.0: a test and a call of a helper that is never inlined.

+ +That fixed 27 throw sites. Iterator arithmetic got 6× as fast with Clang, and `std::sort` over a `json` array of 10,000 +integers in user code 6–9% faster. + +The value's own lifecycle had the same problem: the destructor, the copy constructor, and +[`operator==`](../../api/basic_json/operator_eq.md) contained the code for every type, so they were too big to inline +even for a number. Clang reported about 380 call sites where they were not inlined. Now the destructor and the copy +constructor start with an inline test whether the value owns memory, which Clang compiles to one bit test +(`1 << type & 0x10E`), `operator==` with one for two scalars of the same type, and the rest is out of line. `j == 5` +went from 3.55 ns to 0.65 ns with Clang. It is not free: a test file of `extern "C"` wrappers around the library's +functions, which we compile to check what gets inlined, grew by 13% at `-O2`, and with GCC, `operator==` on large +documents got about 7% slower. + +### Aliasing + +C++ allows a `char` to access any object, so a store through a `char` pointer may change any object whose address the +compiler can't rule out. In a writer that keeps its write position `pos` in a member, `buffer[pos++] = c` therefore +costs more than it looks: the compiler can't prove that the store of `c` didn't overwrite `pos` itself, so it writes +`pos` to memory before every character and loads it again after. A local variable whose address never escapes can't be +reached by any store, and stays in a register: + +```cpp +std::size_t pos = write_buffer_pos; // a local: no char store can reach it +// ... write_buffer[pos++] = digit; ... +write_buffer_pos = pos; // published once at the end +``` + +

Keeping the write position in a local, so that the compiler can keep it in a +register.

+ +On a 4 MiB binary value, [`dump()`](../../api/basic_json/dump.md) went from 18.0 ms to 7.4 ms with this change alone. +`json_document`'s writer and the binary writers keep their cursors in locals for the same reason, and publish them +before any call that could see them. + +### Loop shape beats branch count + +A change that removed one branch per whitespace byte made scanning long runs of indentation 1.75–3.2× *slower* with +Clang and GCC. It had rewritten `do { get(); } while (is_whitespace());` into +`get(); while (is_whitespace()) { get_ignoring_pending_unget(); }`, and the assembly showed why it lost: neither +compiler kept the input's read and end pointers in registers any more, and both reloaded them from memory on every +character. Restoring the do-while shape, `get(); if (is_whitespace()) { do { ... } while (is_whitespace()); }`, fixed +it. We don't know why the while loop lost the registers, only that the do-while shape gets them back. + +### Inlining that disappears + +Inlining is a budget per function. Once the string writer had grown, GCC 13 and 16 stopped inlining two tiny, unchanged +helpers into the pretty-printing loop, and indented output got up to 13% slower. They are now forced inline. A change in +one place silently made an unrelated loop slower; only a benchmark of indented output noticed. + +### Branches the compiler chose + +[`json_document`](../../api/json_document.md) writes most floats of `canada.json` by deciding, from where the `double` +lies relative to its source text, which of two or three candidate digit strings to write. The conditions of those +selections depend on the digits, so they are as good as random: + +```cpp +const bool up = from > 37 * one; +const bool shorter = biased_distance(from - (up ? 10 * one : 0)) < radius; +const std::uint64_t a = w - r10 + (up ? 10u : 0u); +return shorter ? a : b; +``` + +

Selecting a candidate digit string: GCC 13 compiled the conditional operators as +jumps.

+ +Clang compiled the `?:` as conditional moves; GCC 13 compiled them as jumps. With nothing to tell it that the conditions +are unpredictable, a branch that skips some work looks cheaper than computing both sides. +[Callgrind](https://valgrind.org/docs/manual/cl-manual.html)'s branch simulation counted 220,000 mispredictions per dump +of `canada.json` with GCC, against 97,000 with Clang. Written as masks, which have no branch form to reconstruct, the +selections stay branch-free with GCC and Clang: + +```cpp +// all ones or zero +std::uint64_t mask_if(bool b) { return std::uint64_t{0} - static_cast(b); } +std::uint64_t select_if(bool b, std::uint64_t a, std::uint64_t c) +{ + return c ^ ((a ^ c) & mask_if(b)); +} + +const bool shorter = biased_distance(from - (mask_if(up) & (10 * one))) < radius; +const std::uint64_t a = w - r10 + (mask_if(up) & 10u); +return select_if(shorter, a, b); +``` + +

The same selections written as masks, which stay branch-free with GCC and Clang.

+ +With GCC on x86-64, the mispredictions went down to 98,000, and the dump of `canada.json` got about 15% faster with 5% +*more* instructions. With Clang, the time stayed the same. We found this one while writing this post. + +### Code size as a cost + +[`get>()`](../../api/basic_json/get.md) used a pack expansion, `{{ j.at(Idx).get()... }}`. A +pack expansion is unrolled before the optimizer decides anything, so once `at()` had become small enough to inline, +Clang emitted one function of about 28,000 instructions (with 3.12.0, about 8,000): a thousand inlined copies of the +bounds and type checks. Its time moved from 657 to 957 ns just by aligning the code differently. A loop needs 49 +instructions. + +!!! note "Instruction counts, not only time" + + On the x86-64 machine we used for checking, moving code by a few bytes changed the time of unrelated benchmarks by + up to ±5%. Many decisions were therefore made on instruction counts (callgrind on Linux, `/usr/bin/time -l` on + macOS), checked against timings of builds with all functions and loops aligned to 64 bytes, and timed interleaved in + one binary with several code layouts. The target, applied strictly in the later changes, was: at least 3% faster, + and no benchmark more than 1% slower. Some changes accepted a small loss elsewhere and say so, such as the 7% on + GCC's `operator==` above. The branch example shows the limit of that rule: it is faster with more instructions. + +## 6 Write through a cursor { #theme-6 } + +In 3.12.0, every [`dump()`](../../api/basic_json/dump.md) created its output adapter with `std::make_shared`, built a +512-character indentation string, and the serializer wrote every structural character through a virtual call: + +```cpp +o->write_characters("{\n", 2); +o->write_characters(indent_string.c_str(), new_indent); +o->write_character('\"'); +``` + +

How the 3.12.0 serializer wrote an object's opening brace and the start of a key: +three virtual calls.

+ +The writing side changed in five steps, one per subsection below: + +```mermaid +flowchart LR + subgraph before["3.12.0"] + direction LR + d1["dump()"] --> a1["make_shared
output adapter"] --> v1["virtual call
per write"] --> s1[("std::string")] + end + subgraph after["3.13.0"] + direction LR + d2["dump()"] --> a2["adapter on
the stack"] --> b2["1 KiB buffer,
bulk append"] --> s2[("std::string")] + end +``` + +

The text serializer's output path before and after the first two steps.

+ +### A buffer in the serializer + +All writes go into a 1 KiB buffer that is flushed in bulk, so the virtual call happens once per KiB, and neighboring +writes can be merged. Runs longer than the buffer are written straight through, so they are not copied twice. + +```cpp +void put_char(char c) +{ + if (JSON_HEDLEY_UNLIKELY(write_buffer_pos == write_buffer.size())) { flush(); } // virtual + write_buffer[write_buffer_pos++] = c; +} +``` + +

Writing one character: the virtual call happens only when the buffer is full.

+ +### No allocation per call + +The adapter lives on the stack, and there is no indentation string any more: `dump(4)` writes the spaces straight into +the buffer. A compact `dump()` of a small object went from 4 heap allocations to 1 with libstdc++ (3 to 1 with libc++): +the returned string, and none if it fits into the string's small buffer. + +### A concrete sink for the binary writers + +The overloads of [`to_cbor()`](../../api/basic_json/to_cbor.md) and friends that return a `std::vector` use a writer +that is a template over the sink type, with no virtual call. Byte order is now swapped with `__builtin_bswap*` (or +`_byteswap_*` with MSVC) instead of `std::reverse` on a byte array: compilers can recognize the reversal as a byte swap +in a small function, but in the CBOR number path, Clang emitted no `bswap` at all. Writing into a vector also allows +[`to_bson()`](../../api/basic_json/to_bson.md) to make one pass instead of two, because a vector can be written to at +any position: BSON puts the size of every document in front of it, so the writer used to walk the value once for the +sizes and once to write. It now writes a placeholder and fills in the size when the document is complete, 12–20% faster +on the M1. Streams and other output adapters, which can only append, still take two passes. + +### A cursor instead of `vector::insert()` + +After the previous step, writing an array of integers as CBOR was still no faster than in 3.12.0, and slower with GCC. +The profile said why: each number's one to eight bytes were appended with `vector::insert()`, which both standard +libraries implement as an out-of-line insert-anywhere routine; it took 30% of the time, more than encoding the numbers. +The sink now keeps a cursor and a limit pointer, reserves space for a whole run of numbers at once, and writes through +the cursor: + +```cpp +CharType* const start = oa.reserve(max_run * integer_encoding_space); // one check per run +CharType* out = start; +for (n = 0; n < max_run && it != end && it->is_number_integer(); ++n, ++it) +{ + out += encode_integer(out, *it); +} +oa.commit(out - start); +``` + +

Encoding a run of integers through a cursor, with one capacity check for the whole +run.

+ +### Integers without branches + +The last step also took the branches out of encoding an integer. After the bounds checks, mispredicted branches +accounted for about 40% of the remaining time: the type, the sign, and the 1-, 2-, 4-, or 8-byte size class of each +integer in a stream are hard to predict. The encoder reads signed and unsigned integers through one masked path, looks +the size class up from the number of leading zero bits, and stores the head as one byte plus one 8-byte word, of which +the caller keeps only as many bytes as the class needs: + +```cpp +// 1, 2, 3 or 4 if x fits 1, 2, 4 or 8 bytes, without a branch +static unsigned integer_size_class(const std::uint64_t x) noexcept +{ + static constexpr std::array size_class_by_leading_zeros = { /* ... */ }; + return size_class_by_leading_zeros[count_leading_zeros(x | 1u)]; +} + +std::size_t encode_first_byte_and_tail(CharType* out, std::uint8_t first_byte, + unsigned size_class, std::uint64_t value) const noexcept +{ + out[0] = to_char_type(first_byte); + const unsigned unused_bits = 64u - ((8u << size_class) >> 1u); + const std::uint64_t tail = is_little_endian ? byteswap(value) >> unused_bits + : value << unused_bits; + // always 8 bytes; the caller keeps the first 0, 1, 2, 4 or 8 + std::memcpy(out + 1, &tail, sizeof(tail)); + return ((std::size_t{1} << size_class) >> 1u) + 1; +} +``` + +

Encoding the head of a CBOR integer without a branch: the size class from a table, +the tail as one 8-byte store.

+ +The table is a table because Clang vectorized the equivalent comparisons into slower code, and the unconditional 8-byte +store is why `reserve()` asks for 9 bytes per integer. Writing an array of small signed integers as CBOR, which had not +gotten faster before, is now 4.2× as fast as with 3.12.0 with Clang on an M1 Max, and was 2.8× as fast with GCC 13 on +x86-64 when the change was made. One more lesson from these changes: the loop over an array is a separate function that +is never inlined. Inlined into the function that writes any value, its register needs made every call of that function +save more registers, once per nested value, which cost `citm_catalog.json` 13%. + +## 7 Fix the algorithm first { #theme-7 } + +None of the micro-optimizations above matter much next to an algorithm that is quadratic. Seven operations were +quadratic or worse in 3.12.0. They are fixes of cases most programs never hit, not tuning, so they are not part of the +3.0× above (except `flatten()`, which the suite happens to measure); [Appendix D](#d-algorithmic-fixes) has the numbers: + +
+--8<-- "images/perf_blog_cliffs.svg" +
+ +

Operations that were quadratic or worse in 3.12.0, on a logarithmic scale; each arrow +leads from the time with 3.12.0 to the time with 3.13.0. Less is better.

+ +### Comparing in one pass + +The most instructive one is [`operator<`](../../api/basic_json/operator_lt.md). Before C++20, `json`'s `operator<` on +two arrays or objects called the `operator<` of `std::vector` or `std::map`, which is `std::lexicographical_compare`. +For every pair of elements it asks `a < b` and, if that is false, `b < a`. When the elements are themselves containers, +both questions recurse into the whole subtree, and when they are equal, both have to go all the way down. So each level +of nesting doubles the work: two equal values nested 20 levels deep took 5.7 ms, 30 levels 3.8 seconds, and 40 levels +would take about an hour. That matters to anyone who keeps `json` values in a `std::set`, uses them as `std::map` keys, +or sorts them. Since C++20, `operator<` is derived from [`operator<=>`](../../api/basic_json/operator_spaceship.md), +which asks once and was never affected. + +3.13.0 compares in one pass over an explicit stack of iterator pairs and gets "less", "equal", "greater" or "unordered" +for each pair at once, so the ordering question is asked once per element. We found two subtleties by comparing 68,121 +results with the old code, not by reading it. `std::lexicographical_compare` steps over a pair it cannot order (a NaN) +and goes on, while the three-way version stops there, so the pass has a flag for which behavior the caller needs. And +object keys must be compared with `operator==` when testing equality, not with the object's comparator: for +`ordered_json`, that comparator is `std::equal_to`, and using it as "less" reports every equal key as smaller. The +single pass has a price: ordering flat arrays of numbers got 27% slower, while flat objects got 34% faster, in the pull +request's measurement. + +### Bounded recursion + +The other side of this theme is depth. A value nested 100,000 levels deep used to crash `dump()`, the copy constructor, +`std::hash`, [`flatten()`](../../api/basic_json/flatten.md) and the BSON and UBJSON writers with a stack overflow, and +in optimized builds `operator==`, [`diff()`](../../api/basic_json/diff.md) and the other binary writers at 300,000 +levels; servers that copy JSON from clients hit that. Other libraries limit the depth of what they parse +([Boost.JSON](https://github.com/boostorg/json) at 32, [serde_json](https://github.com/serde-rs/json) at 128, +[simdjson](https://github.com/simdjson/simdjson) at 1024) or parse and write iteratively +([yyjson](https://github.com/ibireme/yyjson)), and [RapidJSON](https://github.com/Tencent/rapidjson) parses recursively +unless asked otherwise. We tried making every walk iterative, but that made `dump()`, copying and merging up to 20% +slower on ordinary documents. So 3.13.0 bounds the recursion instead: + +```cpp +constexpr std::size_t recursion_depth_limit() noexcept { return 128; } + +static void destroy_bounded(basic_json& v, std::size_t depth) noexcept +{ + if (JSON_HEDLEY_UNLIKELY(depth >= detail::recursion_depth_limit())) + { + destroy_walk(v); // deeper than 128 levels: no recursion at all (below) + return; + } + // for each child that is a container: destroy_bounded(child, depth + 1) + free_container(v); +} +``` + +

Bounded recursion: recursive down to 128 levels, iterative below.

+ +The first 128 levels run the old recursive code, and only below that does an explicit stack, or the walk below, take +over. A document nested less deeply pays one comparison per container. Testing for equality walks `std::vector` and +`std::map` itself and passes the depth as an argument. Copying can't do that cheaply: the containers' copy constructors +call ours for every element, and a copy that inserts element by element so that it can pass the depth measured 4–16% +slower, because `std::map`'s own copy clones its tree without comparing a single key. So copying counts the levels in a +`thread_local` counter instead, about ten nanoseconds per copy of a small object. Three more operations use the same +counter: converting a value from another `basic_json` specialization, the ordering comparisons (`<`, `<=>` and the +operators derived from them), and equality for custom container types, whose own `operator==` calls ours. + +### Destroying without a stack + +The destructor's walk for deep values uses pointer reversal, the idea behind the [Schorr-Waite graph marking +algorithm](https://doi.org/10.1145/363534.363554): while it empties a container, the slot of that container's last child +holds the link back to the container's parent, so the way back needs no memory ([Appendix I](#i-details-of-the-themes) +shows the loop). The walk allocates nothing and calls nothing that can throw, which fixed two older bugs: the previous +destructor flattened children into a `std::vector`, which ignored the allocator type and could let `std::bad_alloc` +escape from a `noexcept` destructor. A test checks with a counting allocator that destroying any value allocates +nothing. Against 3.12.0, destroying a parsed document is 1.24–1.55× as fast in our suite, and destroying an array of one +million small objects 1.39×. + +## 8 Build a different data structure { #theme-8 } + +After all of the above, [`json::parse()`](../../api/basic_json/parse.md) is still bound by what it builds: one heap +allocation per string, array and object, and a `std::map` node per member, all of which have to be freed again. Many +programs only parse a document, read some fields and throw it away, or change a few values and write it back. For them, +3.13.0 adds [`json_document`](../../features/json_view.md) and `json_view` in a new header, ``. +The two figures below show what each parser makes of this 54-byte text: + +```json +{"port": 6379, "price": 19.90, "tags": ["eu", "a\"b"]} +``` + +

The example text of the next two figures.

+ +
+--8<-- "images/json_view_layout_tree.svg" +
+ +

What `json::parse()` builds: a tree in which every object, array, and string is a +separate heap allocation (dashed). The float is converted to the nearest `double` while parsing, so the original text +`19.90` is gone: the stored value is 19.899999999999998578…, which `dump()` writes as `19.9`, the shortest text that +reads back as the same `double`.

+ +
+--8<-- "images/json_view_layout_index.svg" +
+ +

What `json_document::parse()` builds from the same text: one flat index of nine 16-byte +nodes in document order, which point back into the source text, plus a buffer for the one string with an escape. A +`json_view` is two pointers, here to the array.

+ +### One flat index + +The design is not ours either. [simdjson's tape](https://github.com/simdjson/simdjson/blob/master/doc/tape.md) and +[yyjson](https://github.com/ibireme/yyjson)'s immutable document are both flat arrays of fixed-size entries in document +order instead of trees of separate allocations, and yyjson's entries are 16 bytes, too. Ours: + +```cpp +struct node +{ + node_kind kind; // object = 1, array = 2, string, number, ... + std::uint8_t flags; // escaped, edited, moved, ... + std::uint16_t extra; // numbers: digits before and after the point; big objects: hash index + std::uint32_t off; // where the value starts in the source text (or in the arena) + std::uint32_t len; // strings and float tokens: bytes; containers: number of elements + std::uint32_t next; // containers: number of nodes in the subtree, including this one +}; +static_assert(sizeof(node) == 16, "node must stay 16 bytes"); +``` + +

A node of `json_document`'s index: 16 bytes for every value.

+ +- **Skipping is an addition.** A container stores the size of its subtree, so the value after it is + `n + (is_container(*n) ? n->next : 1)`, and the members of an object are a key node followed by the value's subtree. + There are no pointers in the parsed index (edits add links, below); the parser fills in `next` when the container + closes. `is_container()` is a single subtraction and comparison, `kind - 1u <= 1u`, which is why objects and arrays + are numbered 1 and 2. +- **Strings stay in the input.** Only strings with escapes are decoded, into an arena. A document makes only a handful + of allocations, no matter how many values it has. The price is that the text must outlive the document, unless the + document owns it: [`parse_copy()`](../../api/basic_json_document/parse_copy.md) copies the text, and parsing an + rvalue `std::string` moves it into the document. Input that can't be read as one contiguous block of bytes, such as a + stream or a `FILE*`, is read into a buffer that the document owns, too. Offsets are 32 bits, which limits a document + to 4 GiB. +- **Integers are converted while their digits are in the cache,** into the last 8 bytes of their node. +- **Floats stay text until you read them.** The node records the number of digits before and after the point, and + reading converts with the same Clinger/Eisel-Lemire code as `json::parse`. We tried converting them during the parse. + Although parsing `canada.json` and reading every number got 4–7% faster, parsing alone got 36–90% slower, so we + dropped it. A default `dump()` writes the shortest form of a float, as `json` does; + [`number_format::source`](../../api/basic_json_view/number_format.md) copies the source text of every number instead. +- **SIMD and tables** as in theme 2, and `\u` escapes are + decoded with a table, as in yyjson. +- **A hash index for big objects,** an idea from [Boost.JSON](https://github.com/boostorg/json). An object with 128 or + more members gets an open-addressing table after parsing; looking up every key of a 10,000-member object went from + 59.8 ms to 0.16 ms. The hash is not seeded, so crafted keys could make building the table quadratic. Probing is + therefore capped at 64 slots: a key that would need more drops the table, and that one object falls back to a linear + search. Parsing can't become quadratic, and a lookup is never slower than the linear search of a small object. +- **Validating writes no index.** [`json_document::accept()`](../../api/basic_json_document/accept.md) runs a second + instantiation of the same builder with a template parameter that turns every store off, so the checks are the same + code, but no node is written and no escaped string is decoded. On x86-64 that made it 17–31% faster on `twitter.json`, + `citm_catalog.json` and `canada.json`, and the 56 MB `jeopardy.json` no longer needs 52 MB of fresh memory just to be + validated. +- **First duplicate wins.** Lookups return the first of duplicate keys, as yyjson and simdjson do, because returning the + last one meant scanning every object to its end and made lookups in small objects 1.6–3.4× slower. `json::parse()` + keeps the last one, so for a text with duplicate keys, the two can disagree; the documentation says so. + +### It can be edited, too + +A read-only index is the easy case, and a fair objection is that `json_document` is only fast because it can't change. +[`json_editable_document`](../../features/json_view.md#editing-a-document) has `set()`, `insert()`, `erase()` and +`push_back()`. An edit never writes into the source text and never moves the parsed index: + +- a new scalar is written over its own node, with new string and number text in an append-only arena; +- new arrays and objects are allocated in chunks of nodes that never move; +- a container whose elements change is marked as moved and gets a separate list of its entries: links to the values, + which stay where they are. The list doubles when it grows, so `push_back()` is amortized constant. + +Views stay valid across edits, because values never move. Reading an edited container costs one flag test per container +and one test per element for a link. The link case is out of line, so that it compiles to a predicted branch rather than +a conditional select that would delay the following loads. Whereas a read-only document carries none of this, an +editable one that hasn't been edited reads within 2% of it on most rows and within 8% on the worst. And because +untouched values keep their source text, [`dump()`](../../api/basic_json_view/dump.md) with `number_format::source` +writes back a patched configuration file with its member order and the spelling of every number (`19.90`) intact, which +`json` (sorted keys) and `ordered_json` (`19.9`) can't. + +The limits are documented: `set()` of a new key searches the object's members, so building a large object key by key is +quadratic, as with `ordered_json`, and an object that was edited loses its hash index and is searched linearly. [How it +compares](#how-it-compares) times the editable document against the mutable trees of other libraries. + +## How it compares + +"Which JSON library parses fastest?" has no answer, because "parsing" means different things in different libraries. +They hold a parsed JSON text in four different ways: + +| approach | what you get | what it costs | libraries we measured | +| --- | --- | --- | --- | +| **mutable tree** | a value per JSON value, every string and number converted and owned; change anything | an allocation per container and often per string, all freed again | nlohmann/json `json`, [Boost.JSON](https://github.com/boostorg/json), [RapidJSON](https://github.com/Tencent/rapidjson), [sonic-cpp](https://github.com/bytedance/sonic-cpp), [Glaze](https://github.com/stephenberry/glaze) `generic`, [yyjson](https://github.com/ibireme/yyjson)'s mutable document; [serde_json](https://github.com/serde-rs/json), [sonic-rs](https://github.com/cloudwego/sonic-rs), [simd-json](https://github.com/simd-lite/simd-json) values | +| **flat document** | one array of small entries in document order; read in any order, many times | a few allocations; read-only, or extra bookkeeping to edit | nlohmann/json `json_document` (editable as `json_editable_document`), yyjson, [simdjson](https://github.com/simdjson/simdjson) DOM | +| **forward-only reading** | each value once, in document order: events (SAX) or a cursor | nothing is built; you can't go back | nlohmann/json [`sax_parse`](../../api/basic_json/sax_parse.md), RapidJSON `Reader`, Boost.JSON `basic_parser`, simdjson On-Demand, Glaze `lazy_json`; serde visitors in Rust | +| **into your own types** | the fields you declared, nothing else | a struct per document shape; other fields are skipped | Glaze reading into structs, serde with `derive`, nlohmann/json `from_json()` from `json` or from a view | + +

The kinds of representation the libraries in this comparison offer. Most libraries +offer more than one.

+ +So a comparison of parse times across the rows of this table compares different amounts of work. Instead, we compare +**use cases**: tasks a program actually has, each of which every library may solve in whatever way it does best. In +nlohmann/json, `json` is the mutable tree and `json_document` the flat document, so we show the library twice: its best +way *with* `json_document` and its best way *without* it. + +### Six use cases + +Each starts from the file's text in a `std::string` (or a byte slice in Rust) and ends with everything the library built +freed again: + +- **validate:** is this text valid JSON? Nothing is kept, so this measures the parser alone, as in a server that checks + a request before it passes it on. +- **sum:** visit every value in document order, convert every number, and add them up. This measures walking a whole + document and converting all of its numbers. +- **select:** read a few fields of every record, such as the id, the user name, and the retweet count of every tweet, as + a program does that needs only part of a response. A library that reads lazily can skip the rest. +- **edit:** change a value, remove a member, and add a member in every record, then write the result as compact JSON: + the round trip of a program that patches a message or a configuration. +- **minify:** read the text and write it as compact JSON, without whitespace. This measures reading and writing + together, without changes in between. +- **write:** write a document that was parsed beforehand as compact JSON; only the writing is timed. + +Each use case runs on each of the four test files, and each library may solve it in every way it offers: in place, with +a SAX handler, into structs, with a parser that is reused (measured, but not chosen). Before anything is timed, every +way's result is checked: the same values, the same string bytes, the same sum of all numbers (to the last bit where they +are added in the same order), and an output that reads back as the expected document. The [README of the +programs](https://github.com/nlohmann/json/tree/develop/tests/benchmarks/json_view/others) lists every way, the fields +and edits per file, and the checks. + +### Where the input comes from + +Starting from a string in memory is how most JSON benchmarks work: it measures the library, not the disk or the +operating system. It is not neutral in every detail, though: + +- The string has 64 bytes of spare capacity, so simdjson, which reads up to 64 bytes past the end, can use it without a + copy. A program would load the file into such a buffer in the first place. +- yyjson, RapidJSON, and simd-json can parse in place, which changes the buffer. So every call gets a fresh copy of the + string, and the copy counts toward their time: 11–14 µs for `twitter.json` on the Mac, and 30–46 µs on x86-64, where + fresh memory costs page faults. yyjson's normal read makes the same copy internally, which is why both ways take about + as long. A server that validates a request and then passes it on needs the copy. A program that reads a file into a + buffer it owns can skip it, so we also timed the in-place ways with the copy made before the timer starts. On the Mac, + yyjson then comes 2–4% closer and stays second, and on `twitter.json` it sums and selects 2–3% faster than + `json_document`. On x86-64, it ties `json_document` in *sum* with Clang and takes 1.06× and 1.19× its time with GCC 16 + and GCC 13. +- `json_document` reads the string in place and keeps pointing into it. A document that owns its text + ([`parse_copy()`](../../api/basic_json_document/parse_copy.md)) costs one copy more: 3–5% on the Mac. +- Reading from files and streams is not part of the comparison. + +```mermaid +flowchart TB + f[/"test file"/] -->|"read once, untimed"| s["std::string with 64 spare bytes"] + s --> timed + subgraph timed ["timed, every call"] + direction LR + c["copy
(in-place ways)"] --> p["parse"] --> u["use case"] --> d["free
everything"] + end +``` + +

What one timed call of a use case contains. For *write*, the document is parsed before +the timer starts, so only the writing is timed. Every way's result is checked before anything is timed.

+ +### Checking less, on purpose + +Some libraries can skip parts of the validation, and that is often why they are fast. A lazy reader such as simdjson's +On-Demand API or Glaze's `lazy_json` only looks at what you ask for; to step over the rest, it matches brackets without +looking inside, so reading a few fields of a large record costs little more than finding them. A minifier only needs to +find whitespace, not understand the values. Skipping the UTF-8 check is RapidJSON's default and sonic-cpp's too. Each is +a good choice for input that is known to be valid, for example text your own program wrote a moment ago. To tell these +ways apart, every way is also fed four broken inputs: the file cut short by one byte, a stray comma, an invalid UTF-8 +byte in a string, and garbage after the value. A way that rejects all four validates fully, and each cell shows the +fastest such way. A way that checks or does less appears in the right half of the cell, with a letter that the caption +explains. + +A word on who set the rules: we wrote every library's benchmark code, chose the files and the rules, and tuned 3.13.0 on +the same machines and files. No maintainer of the other libraries has reviewed their code. If you know a faster way for +any of them, please open an issue, and we will rerun the comparison. To check ourselves, we also ran files and a +conformance suite we never tuned on ([below](#files-and-checks-we-didnt-choose)). + +
+--8<-- "images/perf_blog_usecases_mac.svg" +
+ +

Time per library and use case on an Apple M1 Max: each library's fastest fully validating +way, as the geometric mean over `twitter.json`, `citm_catalog.json`, `canada.json` and `jeopardy.json`, so that every +file counts equally, divided by the fastest library's mean, which therefore shows 1.00. Less is better. Where a way that +checks or does less is at least 3% faster, it is shown in the right half of the cell: "U" trusts UTF-8, "P" reads +lazily, only removes whitespace or, in one Glaze cell on x86-64, doesn't check what follows the value, and "N" copies +number text instead of formatting it. "n/a" means the library has no API for the use case. Hover over or tap a cell for +the times per file and the way; the tables are in [Appendix E](#e-comparison-with-other-libraries). sonic-cpp's README +lists only x86-64 Linux; we show it on the Mac anyway.

+ +### Results on the Mac + +On the Apple M1 Max, among the ways that reject all four broken inputs, `json_document` has the lowest mean on the four +files in all six use cases, and yyjson is second in every column. That includes editing, where the editable document is +faster than yyjson's mutable document: the speed doesn't depend on being read-only. + +Some caveats belong next to that: + +- **The lead is not the same on every file.** On `twitter.json`, yyjson is within 3–7% in *validate*, *sum*, and + *select*. Most of the lead comes from `citm_catalog.json`, the floats of `canada.json` (next point) and the size of + `jeopardy.json`. +- **Floats are converted only when read.** That helps `json_document` in *validate* and *select* on `canada.json`, where + most others convert 111,080 floats nobody looks at. Libraries that can skip the conversion use that mode there, but + only Boost.JSON gains much: it validates `canada.json` in 47% of the time. *sum* reads every number, so it is the fair + comparison for floats; there, `json_document` is still slightly ahead of yyjson. +- **Checking less pays in *select*.** If the input needn't be checked fully, simdjson's On-Demand API and Glaze reading + into structs select in 0.75× and 0.82× `json_document`'s time (Glaze is faster only on `citm_catalog.json` and + `canada.json`), and in 0.54–0.62× on x86-64: the right halves of the *select* column. +- **Indentation.** Two of the four files are indented, which theme + 2 helps. On minified copies of `twitter.json` and + `citm_catalog.json`, yyjson comes closer in *sum* (1.11 → 1.04) but not in *validate* (1.28 → 1.27), and + `json_document` stays first. +- **Number text can be copied.** With [`number_format::source`](../../api/basic_json_view/number_format.md), + `json_document` writes each number by copying its text instead of formatting it, and yyjson and RapidJSON can read + numbers as text and write them back unchanged. The output keeps the source's spelling of each number, which is all a + minifier needs. It makes writing `canada.json` with `json_document` 4.0× as fast and minifying it 1.9× as fast; the + "N" halves of *edit*, *minify*, and *write* show it. +- **Small documents.** On a 2.5 KB message, the fastest libraries take about a microsecond on the Mac and 1.2–2 on + x86-64. yyjson validates and sums it as fast as `json_document` on the Mac, and with GCC 16 on x86-64, simdjson and + yyjson sum it slightly faster. + +### Reading into structs + +A view can be converted into your own types with the same [`from_json()`](../../features/arbitrary_types.md) as `json`, +including the ones the [`NLOHMANN_DEFINE_TYPE_*`](../../api/macros/nlohmann_define_type_non_intrusive.md) macros +generate. That is as fast as picking the fields by hand from the view; only for the many small records of +`jeopardy.json` does it take 23% longer. On the Mac, Glaze, serde_json, and Boost.JSON's `parse_into`, reading into the +same structs and checking everything, take 1.7×, 2.2×, and 3.1× as long (geometric mean over the four files). On a +`json` value, reading into the structs takes about as long as `json::parse()` alone. + +### nlohmann/json without `json_document` + +And nlohmann/json without `json_document`? `json` builds a tree of separate allocations, and it shows: for *select*, +*edit*, and *minify* it takes several times as long as `json_document`, like Boost.JSON and RapidJSON. Where no tree is +needed, it is closer: on the Mac, a SAX handler is on par with Boost.JSON's, and +[`json::accept()`](../../api/basic_json/accept.md) takes 6% longer than Boost.JSON without number conversion (on x86-64, +Boost.JSON validates in 0.65–0.69× and sums in 0.75–0.79× the time). `dump()` writes faster than Boost.JSON, RapidJSON +and serde_json, and about as fast as Glaze. + +Much of Boost.JSON's lead in building a tree comes from its allocator: here it builds the tree in a +`monotonic_resource`, an arena that is freed in one go, which saves it 28–41%. With its default allocator, which +allocates every string, array, and object on its own as `json` does, `boost::json::parse()` with precise numbers takes +as long as `json::parse()` on `twitter.json`, 5% longer on `citm_catalog.json`, and 17% less time on `canada.json` (on +the Mac, freeing the tree included). + +### Results on x86-64 + +On x86-64, the same programs ran on a virtual server with Ubuntu 26.04 whose CPU presents itself as Haswell, pinned to +one core. We built them with `-march=haswell` and three compilers: the newest GCC, 16.2 (the figure below), GCC 13.4, +and Clang 23 (both in [Appendix E](#e-comparison-with-other-libraries)). The compiler matters less than one might think. +On the Mac, GCC 16 and Clang 23 put the same library first in every column as Apple clang, and on x86-64, the three +compilers disagree only about *sum*. + +
+--8<-- "images/perf_blog_usecases_x86-gcc.svg" +
+ +

The same comparison on the x86-64 server with GCC 16.2, with the same cells and halves as +the figure above. Less is better; hover over or tap a cell for the times and the way. The figures for GCC 13 and Clang +23 are in [Appendix E](#e-comparison-with-other-libraries).

+ +`json_document` has the lowest mean in five of the six columns with GCC, where simdjson is ahead in *sum*, and in all +six with Clang. This machine is noisy, though: between two runs, a library's time relative to `json_document`'s moved by +up to 9–10% (95th percentile; 2.5% on the Mac). So Clang's 7% lead in *sum* over sonic-rs is no result, and without +`twitter.json`, sonic-rs is first. In *validate*, the next library takes 1.8–1.9× as long, or 1.6–1.7× if every library +may reuse its parser, because validating no longer builds an index (theme +8). Behind those means, it loses on single files: + +- **One pass over every value, with GCC.** simdjson's On-Demand API sums all numbers of `twitter.json`, + `citm_catalog.json`, and `canada.json` in 0.83–0.99× `json_document`'s time with GCC 16 (0.86–0.91× with GCC 13). With + Clang, `json_document` is ahead there, except on `canada.json`, where yyjson, which converts the floats during the + parse, is faster than converting them on access. +- **Fresh large documents.** For the 56 MB `jeopardy.json`, a fresh document needs a fresh 52 MB index, and on Linux the + page faults of that much new memory are a large part of the time: copying the file into fresh memory alone takes about + 50% as long as `json_document`'s parse. Boost.JSON's SAX parser and sonic-rs, which build nothing, sum it in + 0.66–0.72× the time. Reusing the document cuts `json_document`'s time by 40–43%, to 51–53 ms, less than sonic-rs's 60 + ms. Validating needs no index: `json_document::accept()` takes 35 ms, and no library validates `jeopardy.json` faster, + even reused (the next is simdjson's reused parser at 47–49 ms). On the Mac, a fresh document costs hardly more than a + reused one. +- **Writing floats.** yyjson writes `canada.json` in 0.87–0.97× the time (and Glaze, with GCC 13, in 0.96×), because + `json_document` first converts most floats from their text. Writing the source text instead (`number_format::source`, + the "N" half) avoids that. +- **simdjson's DOM.** It selects from `citm_catalog.json` 16% faster with GCC 16 and 1–4% faster with GCC 13 and Clang + 23, and from `twitter.json` 1–6% faster. Boost.JSON, Glaze, sonic-cpp, and yyjson are 1–3% ahead in a few more cells, + which is within the noise. + +The full tables, with each library's variants, are in [Appendix E](#e-comparison-with-other-libraries). + +### Files and checks we didn't choose { #files-and-checks-we-didnt-choose } + +The four files are the ones 3.13.0 was tuned on, so we also ran *validate*, *sum*, *minify*, and *write* on the 19 other +files of simdjson's [`jsonexamples`](https://github.com/simdjson/simdjson-data/tree/master/jsonexamples). By geometric +mean, `json_document` stays the fastest in *validate*, *minify*, and *write* on every compiler, and in *sum* with Clang +and on the Mac; with GCC, simdjson sums in 0.86–0.87× its time. File by file, for *validate*: + +
+--8<-- "images/perf_blog_heldout.svg" +
+ +

*validate* on the 19 files: `json_document`'s fastest fully validating way against the +fastest other library's, per file; below 1.0× it is the fastest. Less is better. The right column names the next library +on x86-64 (GCC 16.2).

+ +`json_document` validates all 19 files fastest with GCC 16 and Clang 23, and 18 with GCC 13 and on the Mac: simdjson +validates `apache_builds` 8% faster on the Mac and `google_maps_api_response` 2% faster with GCC 13. Before validating +without an index (theme 8) and skipping fraction digits 16 bytes +at a time (theme 2), Boost.JSON validated the number-heavy files +up to 1.5× as fast on x86-64. + +The four probes are broken inputs that tell full validation from less ([Appendix E](#e-comparison-with-other-libraries) +lists them). As a further check, every *validate* way also ran the 318 files of +[JSONTestSuite](https://github.com/nst/JSONTestSuite). [Appendix E](#e-comparison-with-other-libraries) lists the +exceptions, one of them ours. The suite also found that Glaze's generic reader accepts garbage after the value by +default, so the figures use its strict option. + +We did not measure memory use, a CPU with AVX-512, MSVC, writing from structs, or streaming input. + +## What didn't work + +The pull requests record the ideas that measured worse, which is as useful as the ones that made it: + +| idea | result | +| --- | --- | +| make every walk iterative | up to 20% slower on ordinary documents | +| move the key out of the lexer's reused buffer | 11.9% slower (later a win, see theme 4) | +| inline `scan_literal()` | Clang's dispatch grew from 233 to 278 instructions and got slower | +| short-string table for strings up to 64 bytes | lost against 32 | +| leave the serializer's buffers uninitialized | timings moved 18% apart in opposite directions on two similar workloads, so dropped; done later, when instruction counts showed 170 instructions saved per `dump()` | +| move the throws of the JSON Pointer lookups out of line too | no measurable gain, dropped; they stay inline | +| `json_document`: an "all ASCII" flag per string | `dump()` with `ensure_ascii` faster, but parsing 1–13% slower | +| `json_document`: convert floats while parsing | `canada.json` parse 36–90% slower | +| `json_document`: note a large object inline in the parse loop | `canada.json` 37% slower | +| `json_document`: vector-scan every string in `set()` | 14–16% slower on 16-byte strings | + +

Ideas that were measured and dropped. [Appendix H](#h-pull-requests-by-theme) links +the pull requests that tried them.

+ +## The price + +None of this is free at compile time. `json.hpp` grew from 25,526 to 46,630 lines (`json_view.hpp` is a separate header +of 11,898 lines that you only pay for if you include it). To see what that means for a program, we compiled two small +ones with both versions: + +- `count_numbers` reads `twitter.json` and adds up all of its numbers, like the *sum* use case in [How it + compares](#six-use-cases); +- `server_config` reads a configuration file into a struct with `to_json()` and `from_json()`, changes it, and writes it + back with `dump(2)`. + +Each is one translation unit. We timed it with the 3.12.0 and the 3.13.0 header, and then with 3.13.0 as a precompiled +header and as a C++20 module, in a debug build (`-O0`) and an optimized one (`-O2`): + +
+--8<-- "images/perf_blog_price.svg" +
+ +

How much longer or shorter each program takes to compile than with 3.12.0, less is +better: Apple clang 21 and GCC 16.2, CPU time of the compiler, median of 5 interleaved runs, C++20, Apple M1 Max. The +one-off cost of building the precompiled header or the module is not included. Hover over a bar for the time in +milliseconds; [Appendix G](#g-how-we-measured) has all times, the programs, and the commands.

+ +3.13.0 takes 34–62% longer to compile these programs. A good part of that is reading the header, and a precompiled +header or a module does that once instead of in every translation unit: + +- **In debug builds,** which are what you wait for while you edit, a precompiled 3.13.0 compiles faster than 3.12.0 with + Apple clang, and within 8–15% of it with GCC. +- **In optimized builds,** less of the increase goes away, because the optimizer still works through all the code a + program instantiates. A precompiled header or a module wins back 41–91% of it. +- **The one-off cost** is 1.0 s (Apple clang) or 2.6 s (GCC) to build the precompiled header, and 1.6 s or 2.5 s to + build the module, once per set of compiler flags. A precompiled header pays for itself after two to four translation + units, a module after three to five. +- **Modules have caveats.** Apple clang needs `-fcxx-modules`, [module support](../../features/modules.md) still depends + heavily on the compiler version, and macros don't cross a module boundary: with `import nlohmann.json;`, the + `NLOHMANN_DEFINE_TYPE_*` macros aren't available, which is why `server_config` writes `to_json()` and `from_json()` by + hand. + +The [compile-time page](../../integration/compile_times.md) measures these and the other options, such as including +`` in headers that only name `json`, and +[`JSON_NO_AUTOMATIC_UDLS`](../../api/macros/json_no_automatic_udls.md). We did not measure binary size or peak memory. + +## Summing up + +Hardly any of the techniques in this post are new. What we think made the difference is their combination, under the +conditions of a header-only C++11 library whose API and output had to stay the same. + +## Thanks + +Most of what is in this post was invented by other people. + +**Code we adapted.** The library contains code adapted from these four projects. We use it under the MIT License, and +the source files that contain it carry the authors' copyright lines and say what was taken; the +[README](https://github.com/nlohmann/json#license) lists them too. + +- [fast_float](https://github.com/fastfloat/fast_float) (Apache-2.0, MIT, or BSL-1.0) by Daniel Lemire and contributors: + the Eisel-Lemire algorithm, its table of powers of five, its digit comparison for long numbers, and its parsing of + eight digits at a time (N. Mushtak and D. Lemire, ["Fast number parsing without + fallback"](https://arxiv.org/abs/2212.06644), 2023). W. D. Clinger for the [fast + path](https://doi.org/10.1145/93542.93557), M. Eisel for the algorithm. +- [Żmij](https://github.com/vitaut/zmij) (MIT) by Victor Zverovich, with the digit conversion of Xiang JunBo, the NEON + sequence and compressed powers of ten of Dougall Johnson, and the SSE support of Tobias Schlüter: ported to C++11. +- [simdjson](https://github.com/simdjson/simdjson) (Apache-2.0 or MIT) by Daniel Lemire, Geoff Langdale, John Keiser, + and contributors: the "lookup4" UTF-8 check and its tables (J. Keiser and D. Lemire, ["Validating UTF-8 In Less Than + One Instruction Per Byte"](https://arxiv.org/abs/2010.03090), 2021), in `json.hpp`'s lexer and in `json_view.hpp`. +- [yyjson](https://github.com/ibireme/yyjson) (MIT) by YaoYuan: table-driven `\u` decoding and the unrolled checks at + fixed offsets in `json_view.hpp`'s parser. + +**Ideas we took.** From these we took the idea, not their code, in the order they appear above: + +- [serde_json](https://github.com/serde-rs/json) (MIT or Apache-2.0): deriving positions from the offset only on error. +- Sean Eron Anderson's [Bit Twiddling Hacks](https://graphics.stanford.edu/~seander/bithacks.html) (snippets in the + public domain): the zero-byte test behind every word-at-a-time scan. +- [Glaze](https://github.com/stephenberry/glaze) (MIT): skipping indentation in 8-byte steps (`skip_matching_ws`). +- [SQLite](https://sqlite.org) (public domain): writing short strings with a table loop, as its `jsonAppendString()` + does. +- [orjson](https://github.com/ijl/orjson) (Apache-2.0 or MIT; its escape table MPL-2.0) and + [sonic-rs](https://github.com/cloudwego/sonic-rs) (Apache-2.0), from which orjson adapted it: escape sequences as + fixed-size table rows (`QUOTE_TAB`). +- [simdjson](https://github.com/simdjson/simdjson)'s tape and [yyjson](https://github.com/ibireme/yyjson)'s 16-byte + immutable document: a flat index in document order instead of a tree. +- [Boost.JSON](https://github.com/boostorg/json) (BSL-1.0): switching to a hash table for large objects. +- [RapidJSON](https://github.com/Tencent/rapidjson) (MIT): recursion as the default, iterative parsing as an option. + +I thank the people who sent or shaped pull requests: + +- [@gregmarr](https://github.com/gregmarr) reviewed most of them and suggested the sized-sentinel fast path, the peek + design for exact stream positions, one SIMD switch for the whole library, and the vector check of `json_view`'s + strings on edit; +- [@veselink1](https://github.com/veselink1) and [@michaelsam94](https://github.com/michaelsam94) wrote the allocator + and exception-safety fixes for the destructor that 3.13.0 [took over][5762]; the non-recursive destructor itself goes + back to [a pull request](https://github.com/nlohmann/json/pull/1436) by [@nickaein](https://github.com/nickaein) in + 2019; +- [@commit-msuyog](https://github.com/commit-msuyog) gave the 128-bit multiplication behind Eisel-Lemire MSVC + intrinsics; +- [@ayush-singh-0601](https://github.com/ayush-singh-0601) started the fix for deep values in the binary writers; +- [@avionicharshit-byte](https://github.com/avionicharshit-byte) made `diff()` linear for shrinking arrays; +- [@mvanslobbe](https://github.com/mvanslobbe) sped up the parser's separator check; +- [@alexprabhat99](https://github.com/alexprabhat99) removed the temporary values behind CBOR and MessagePack object + keys. + +`twitter.json`, `citm_catalog.json` and `canada.json` come from Milo Yip's +[nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark) (MIT). + +## Appendix + +### A. Test files + +| file | size | what it is | what makes it hard | +| --- | --: | --- | --- | +| `twitter.json` | 632 KB | 100 tweets from Twitter's search API, with their users | strings: 58% of the bytes are keys and strings, 15% of the bytes are non-ASCII (almost all of it Japanese text), and 13,345 keys | +| `citm_catalog.json` | 1.7 MB | a concert hall's catalog of events, performances and seat categories, in French | structure: 21,388 small objects and arrays, 14,392 integers, keys that average 8 bytes, and 71% whitespace from indentation | +| `canada.json` | 2.3 MB | the outline of Canada in GeoJSON | numbers: 111,080 floating-point coordinates, most with 16 or 17 significant digits, in 56,045 arrays, and almost no whitespace | +| `jeopardy.json` | 56 MB | 216,930 Jeopardy! questions as one array of objects | size: 1.5 million short strings in objects of 7 members; far larger than the CPU caches | + +

The test files. The first three are from Milo Yip's +[nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark). The counts are of the parsed values; the share +of whitespace, string, and non-ASCII bytes is of the file as distributed. Several changes target the indentation of +`citm_catalog.json`: in the timeline benchmark, a minified copy of it parses 1.9× as fast as with 3.12.0, against 3.4× +for the file as distributed.

+ +### B. 3.12.0 against 3.13.0 + +The rows of the first chart: + +| workload | 3.12.0 | 3.13.0 | speedup | Intel | +| --- | --: | --: | --: | --: | +| `json::parse()` of `twitter.json` | 3.30 ms | 1.05 ms | 3.1× | 2.6× | +| `json::parse()` of `citm_catalog.json` | 7.56 ms | 1.78 ms | 4.3× | 3.5× | +| `json::parse()` of `canada.json` | 15.5 ms | 4.63 ms | 3.4× | 6.1× | +| `json::parse()` of `canada.json`, indented by 4 spaces | 35.0 ms | 5.37 ms | 6.5× | 8.0× | +| `ordered_json::parse()` of `citm_catalog.json` | 11.5 ms | 1.68 ms | 6.9× | 6.6× | +| `json::parse()` of `twitter.json` from an `std::ifstream` | 3.43 ms | 1.37 ms | 2.5× | 2.3× | +| `json::parse()` of `citm_catalog.json` from a `FILE*` | 36.0 ms | 7.58 ms | 4.7× | 5.7× | +| `json::accept()` of `citm_catalog.json` | 6.53 ms | 0.923 ms | 7.1× | 8.4× | +| `dump()` of `twitter.json` | 1.44 ms | 0.214 ms | 6.7× | 5.7× | +| `dump()` of `canada.json` | 6.95 ms | 2.34 ms | 3.0× | 3.3× | +| `dump(4)` of `citm_catalog.json` | 1.99 ms | 0.423 ms | 4.7× | 4.1× | +| `to_cbor()` of `twitter.json` | 0.659 ms | 0.143 ms | 4.6× | 6.7× | +| `from_cbor()` of `twitter.json` from memory | 3.23 ms | 0.953 ms | 3.4× | 2.8× | +| `from_cbor()` of `twitter.json` from a `FILE*` | 10.4 ms | 1.57 ms | 6.6× | 6.5× | +| `diff()` of `canada.json` with every eighth scalar changed | 39.8 ms | 3.80 ms | 10.5× | 11.2× | +| iterating over every value of `canada.json` | 0.897 ms | 0.328 ms | 2.7× | 2.0× | +| copying `citm_catalog.json` and destroying the copy | 1.70 ms | 1.51 ms | 1.13× | 1.12× | +| `==` of `citm_catalog.json` and a copy | 0.280 ms | 0.263 ms | 1.06× | 0.95× | + +

Time per call with 3.12.0 and 3.13.0, Google Benchmark suite on an Apple M1 Max, +median of 8 runs; the speedup is the old time divided by the new one. The Intel column is the speedup on the Intel +MacBook Pro of [Appendix G](#g-how-we-measured). The parse rows do not include destroying the result (the suite pauses +the timer for that).

+ +??? info "All 182 benchmarks of the suite" + + | benchmark | 3.12.0 | 3.13.0 | speedup | Intel | + | --- | --: | --: | --: | --: | + | `Accept/canada` | 12.9 ms | 2.35 ms | 5.51× | 13× | + | `Accept/citm_catalog` | 6.53 ms | 923 µs | 7.07× | 8.45× | + | `Accept/floats` | 116 ms | 22.7 ms | 5.10× | 12.2× | + | `Accept/jeopardy` | 221 ms | 59.3 ms | 3.72× | 6.64× | + | `Accept/signed_ints` | 117 ms | 28.3 ms | 4.15× | 4.99× | + | `Accept/small_signed_ints` | 57.5 ms | 18 ms | 3.19× | 3.90× | + | `Accept/twitter` | 2.51 ms | 484 µs | 5.20× | 6.89× | + | `Accept/unsigned_ints` | 116 ms | 29.7 ms | 3.91× | 4.95× | + | `BinaryToCbor/1024` | 298 ns | 107 ns | 2.79× | 3.67× | + | `BinaryToCbor/128` | 249 ns | 117 ns | 2.13× | 2.27× | + | `BinaryToCbor/16384` | 952 ns | 414 ns | 2.30× | 3.46× | + | `BinaryToCbor/16` | 245 ns | 49.6 ns | 4.93× | 6.33× | + | `BinaryToCbor/2048` | 328 ns | 125 ns | 2.62× | 3.74× | + | `BinaryToCbor/256` | 265 ns | 90.9 ns | 2.91× | 3.33× | + | `BinaryToCbor/32768` | 1.54 µs | 803 ns | 1.92× | 2.11× | + | `BinaryToCbor/32` | 252 ns | 50.4 ns | 4.99× | 6.24× | + | `BinaryToCbor/4096` | 407 ns | 177 ns | 2.29× | 3.48× | + | `BinaryToCbor/512` | 290 ns | 102 ns | 2.84× | 3.02× | + | `BinaryToCbor/64` | 255 ns | 84.6 ns | 3.01× | 3.78× | + | `BinaryToCbor/8192` | 514 ns | 256 ns | 2.01× | 3.30× | + | `BinaryToCbor/8` | 248 ns | 49.4 ns | 5.01× | 6.18× | + | `Copy/canada` | 3.78 ms | 2.93 ms | 1.29× | 1.17× | + | `Copy/citm_catalog` | 1.7 ms | 1.51 ms | 1.13× | 1.12× | + | `Copy/twitter` | 840 µs | 767 µs | 1.09× | 1.14× | + | `CopyAssign/canada` | 3.86 ms | 2.94 ms | 1.31× | 1.19× | + | `CopyAssign/citm_catalog` | 1.77 ms | 1.59 ms | 1.11× | 1.12× | + | `CopyAssign/twitter` | 885 µs | 791 µs | 1.12× | 1.07× | + | `CopyOnly/canada` | 1.6 ms | 1.58 ms | 1.02× | 1.00× | + | `CopyOnly/citm_catalog` | 786 µs | 817 µs | 0.96× | 0.93× | + | `CopyOnly/twitter` | 424 µs | 421 µs | 1.01× | 1.02× | + | `CopyRing/canada` | 3.86 ms | 3 ms | 1.29× | 1.20× | + | `CopyRing/citm_catalog` | 1.84 ms | 1.61 ms | 1.15× | 1.20× | + | `CopyRing/twitter` | 952 µs | 818 µs | 1.16× | 1.15× | + | `DestroyOnly/canada` | 2.22 ms | 1.4 ms | 1.58× | 1.32× | + | `DestroyOnly/citm_catalog` | 926 µs | 711 µs | 1.30× | 1.20× | + | `DestroyOnly/twitter` | 416 µs | 336 µs | 1.24× | 1.15× | + | `Diff/canada` | 39.8 ms | 3.8 ms | 10.5× | 11.2× | + | `Diff/citm_catalog` | 7.19 ms | 1.12 ms | 6.40× | 7.78× | + | `Diff/twitter` | 5.11 ms | 661 µs | 7.73× | 8.79× | + | `Dump/canada / -` | 6.95 ms | 2.34 ms | 2.98× | 3.34× | + | `Dump/canada / 4` | 9.1 ms | 3.1 ms | 2.93× | 2.82× | + | `Dump/citm_catalog / -` | 1.42 ms | 296 µs | 4.81× | 3.93× | + | `Dump/citm_catalog / 4` | 1.99 ms | 423 µs | 4.70× | 4.09× | + | `Dump/floats / -` | 64.3 ms | 23.8 ms | 2.71× | 2.50× | + | `Dump/floats / 4` | 72.6 ms | 24.6 ms | 2.95× | 2.71× | + | `Dump/jeopardy / -` | 207 ms | 31.7 ms | 6.51× | 3.75× | + | `Dump/jeopardy / 4` | 228 ms | 35.4 ms | 6.45× | 2.61× | + | `Dump/signed_ints / -` | 24.1 ms | 10.7 ms | 2.24× | 1.44× | + | `Dump/signed_ints / 4` | 32.5 ms | 11.3 ms | 2.87× | 2.01× | + | `Dump/small_signed_ints / -` | 18.1 ms | 8.12 ms | 2.23× | 1.81× | + | `Dump/small_signed_ints / 4` | 25.5 ms | 8.81 ms | 2.90× | 2.21× | + | `Dump/twitter / -` | 1.44 ms | 214 µs | 6.70× | 5.75× | + | `Dump/twitter / 4` | 1.63 ms | 253 µs | 6.45× | 5.18× | + | `Dump/unsigned_ints / -` | 24 ms | 8.12 ms | 2.95× | 1.58× | + | `Dump/unsigned_ints / 4` | 32.3 ms | 8.59 ms | 3.76× | 2.30× | + | `Equal/canada` | 474 µs | 349 µs | 1.36× | 1.38× | + | `Equal/citm_catalog` | 280 µs | 263 µs | 1.06× | 0.95× | + | `Equal/twitter` | 146 µs | 131 µs | 1.11× | 1.02× | + | `Flatten/canada` | 29.4 ms | 11.1 ms | 2.65× | 2.68× | + | `Flatten/citm_catalog` | 6.72 ms | 3.07 ms | 2.19× | 2.45× | + | `Flatten/twitter` | 3.66 ms | 2.11 ms | 1.74× | 2.19× | + | `FlattenOrdered/citm_catalog` | 262 ms | 1.43 ms | 184× | 185× | + | `FlattenOrdered/twitter` | 51.3 ms | 890 µs | 57.6× | 46.1× | + | `FromBinaryBuffer/bjdata / canada` | 8.82 ms | 4.17 ms | 2.12× | 2.02× | + | `FromBinaryBuffer/bjdata / twitter` | 3.32 ms | 976 µs | 3.40× | 2.87× | + | `FromBinaryBuffer/bjdata_optimized / canada` | 9.24 ms | 2.48 ms | 3.73× | 3.51× | + | `FromBinaryBuffer/bjdata_optimized / twitter` | 3.31 ms | 986 µs | 3.35× | 2.86× | + | `FromBinaryBuffer/bson / canada` | 10 ms | 4.32 ms | 2.33× | 2.20× | + | `FromBinaryBuffer/bson / citm_catalog` | 4.08 ms | 1.61 ms | 2.54× | 2.59× | + | `FromBinaryBuffer/bson / twitter` | 3.26 ms | 937 µs | 3.48× | 3.08× | + | `FromBinaryBuffer/cbor / canada` | 8.9 ms | 2.12 ms | 4.21× | 3.86× | + | `FromBinaryBuffer/cbor / citm_catalog` | 3.94 ms | 1.45 ms | 2.71× | 2.81× | + | `FromBinaryBuffer/cbor / floats` | 30.5 ms | 5.48 ms | 5.56× | 3.64× | + | `FromBinaryBuffer/cbor / jeopardy` | 373 ms | 115 ms | 3.25× | 3.43× | + | `FromBinaryBuffer/cbor / signed_ints` | 36.7 ms | 9.89 ms | 3.71× | 2.37× | + | `FromBinaryBuffer/cbor / twitter` | 3.23 ms | 953 µs | 3.39× | 2.83× | + | `FromBinaryBuffer/msgpack / canada` | 8.86 ms | 2.12 ms | 4.17× | 3.92× | + | `FromBinaryBuffer/msgpack / citm_catalog` | 3.85 ms | 1.45 ms | 2.65× | 2.94× | + | `FromBinaryBuffer/msgpack / jeopardy` | 373 ms | 111 ms | 3.36× | 3.51× | + | `FromBinaryBuffer/msgpack / twitter` | 3.24 ms | 955 µs | 3.39× | 3.02× | + | `FromBinaryBuffer/ubjson / canada` | 8.84 ms | 4.2 ms | 2.10× | 2.13× | + | `FromBinaryBuffer/ubjson / citm_catalog` | 4.07 ms | 1.79 ms | 2.28× | 2.44× | + | `FromBinaryBuffer/ubjson / jeopardy` | 379 ms | 117 ms | 3.24× | 3.40× | + | `FromBinaryBuffer/ubjson / twitter` | 3.3 ms | 981 µs | 3.36× | 2.90× | + | `FromBinaryBuffer/ubjson_optimized / canada` | 8.89 ms | 2.43 ms | 3.66× | 3.67× | + | `FromBinaryBuffer/ubjson_optimized / twitter` | 3.3 ms | 975 µs | 3.38× | 2.88× | + | `FromBinaryFile/bjdata / twitter` | 10.9 ms | 1.95 ms | 5.61× | 5.89× | + | `FromBinaryFile/bson / twitter` | 10.7 ms | 1.85 ms | 5.80× | 6.21× | + | `FromBinaryFile/cbor / canada` | 14.9 ms | 4.49 ms | 3.32× | 3.68× | + | `FromBinaryFile/cbor / twitter` | 10.4 ms | 1.57 ms | 6.59× | 6.46× | + | `FromBinaryFile/ubjson / canada` | 14.3 ms | 6.43 ms | 2.23× | 2.50× | + | `FromBinaryFile/ubjson / twitter` | 10.9 ms | 1.97 ms | 5.54× | 5.90× | + | `FromBinaryShape/containers / bjdata` | 14.7 ms | 7.23 ms | 2.03× | 2.05× | + | `FromBinaryShape/containers / bson` | 17.6 ms | 7.89 ms | 2.23× | 2.20× | + | `FromBinaryShape/containers / cbor` | 14.6 ms | 4.16 ms | 3.52× | 3.49× | + | `FromBinaryShape/containers / msgpack` | 14.6 ms | 3.89 ms | 3.75× | 3.52× | + | `FromBinaryShape/containers / ubjson_optimized` | 15.5 ms | 4.56 ms | 3.40× | 3.34× | + | `FromBinaryShape/containers / ubjson` | 15 ms | 7.24 ms | 2.07× | 2.03× | + | `FromBinaryShape/nested / bjdata` | 96.8 µs | 38.3 µs | 2.53× | 2.50× | + | `FromBinaryShape/nested / bson` | 101 µs | 42.6 µs | 2.38× | 2.42× | + | `FromBinaryShape/nested / cbor` | 94.9 µs | 35.8 µs | 2.65× | 2.57× | + | `FromBinaryShape/nested / msgpack` | 92.6 µs | 35.1 µs | 2.64× | 2.60× | + | `FromBinaryShape/nested / ubjson` | 96.1 µs | 38.3 µs | 2.51× | 2.50× | + | `FromBinaryShape/scalars / bjdata` | 25.3 ms | 11.6 ms | 2.18× | 2.22× | + | `FromBinaryShape/scalars / cbor` | 26.2 ms | 5.89 ms | 4.45× | 3.56× | + | `FromBinaryShape/scalars / msgpack` | 25.1 ms | 5.65 ms | 4.44× | 3.69× | + | `FromBinaryShape/scalars / ubjson` | 25.3 ms | 11.6 ms | 2.18× | 2.03× | + | `FromCborChunkedString/10000 chunks` | 91.8 µs | 82.9 µs | 1.11× | 1.09× | + | `FromMsgpack/canada` | 14.9 ms | 4.56 ms | 3.26× | 3.63× | + | `FromMsgpack/citm_catalog` | 9.36 ms | 2.26 ms | 4.14× | 4.60× | + | `FromMsgpack/floats` | 61.3 ms | 28.7 ms | 2.14× | 2.89× | + | `FromMsgpack/jeopardy` | 1,170 ms | 190 ms | 6.14× | 6.80× | + | `FromMsgpack/signed_ints` | 63.9 ms | 32.9 ms | 1.94× | 2.44× | + | `FromMsgpack/small_signed_ints` | 64.5 ms | 34.4 ms | 1.87× | 2.33× | + | `FromMsgpack/twitter` | 10.3 ms | 1.49 ms | 6.92× | 6.76× | + | `FromMsgpack/unsigned_ints` | 57.8 ms | 28.3 ms | 2.04× | 2.77× | + | `GetArray>` | 2.27 µs | 654 ns | 3.48× | 5.38× | + | `GetArray>` | 8.29 µs | 1.18 µs | 7.05× | 4.75× | + | `GetArray>` | 60 µs | 42.5 µs | 1.41× | 1.30× | + | `GetArray>` | 6.79 µs | 682 ns | 9.95× | 4.10× | + | `GetMap/citm_catalog` | 3.6 ms | 2.49 ms | 1.45× | 1.48× | + | `GetVectorDouble/floats` | 6.84 ms | 656 µs | 10.4× | 2.98× | + | `GetVectorInt/signed_ints` | 8.22 ms | 3.46 ms | 2.37× | 2.02× | + | `Iterate/canada` | 897 µs | 328 µs | 2.73× | 2.02× | + | `Iterate/citm_catalog` | 305 µs | 171 µs | 1.78× | 1.53× | + | `Iterate/twitter` | 90 µs | 62 µs | 1.45× | 1.20× | + | `JsonPointerAt/citm_catalog` | 1.9 ms | 1.18 ms | 1.61× | 1.47× | + | `JsonPointerAt/twitter` | 818 µs | 612 µs | 1.34× | 1.14× | + | `JsonPointerContains/citm_catalog` | 2.82 ms | 1.27 ms | 2.22× | 2.51× | + | `JsonPointerContains/twitter` | 1.34 ms | 629 µs | 2.12× | 2.16× | + | `JsonPointerParse/citm_catalog` | 5.81 ms | 2.25 ms | 2.59× | 3.74× | + | `JsonPointerParse/twitter` | 2.48 ms | 1.02 ms | 2.43× | 3.18× | + | `JsonPointerToString/citm_catalog` | 6.79 ms | 1.94 ms | 3.50× | 4.61× | + | `JsonPointerToString/twitter` | 2.23 ms | 834 µs | 2.67× | 2.66× | + | `ParseFILE/canada` | 54.2 ms | 14.7 ms | 3.69× | 5.46× | + | `ParseFILE/citm_catalog` | 36 ms | 7.58 ms | 4.74× | 5.73× | + | `ParseFILE/twitter` | 14.1 ms | 3.45 ms | 4.08× | 4.24× | + | `ParseFile/canada` | 18.3 ms | 6.47 ms | 2.83× | 4.67× | + | `ParseFile/citm_catalog` | 8.13 ms | 2.52 ms | 3.22× | 2.98× | + | `ParseFile/floats` | 131 ms | 48.1 ms | 2.73× | 5.68× | + | `ParseFile/jeopardy` | 338 ms | 162 ms | 2.09× | 2.23× | + | `ParseFile/signed_ints` | 129 ms | 46.2 ms | 2.78× | 3.41× | + | `ParseFile/small_signed_ints` | 64.7 ms | 33.4 ms | 1.94× | 2.57× | + | `ParseFile/twitter` | 3.43 ms | 1.37 ms | 2.49× | 2.33× | + | `ParseFile/unsigned_ints` | 124 ms | 47.4 ms | 2.61× | 3.52× | + | `ParseIndented/canada / 4` | 35 ms | 5.37 ms | 6.51× | 8.02× | + | `ParseIndented/citm_catalog / 4` | 7.52 ms | 1.81 ms | 4.15× | 3.49× | + | `ParseIndented/jeopardy / 4` | 345 ms | 133 ms | 2.59× | 2.46× | + | `ParseIndented/twitter / 4` | 3.72 ms | 1.13 ms | 3.30× | 2.60× | + | `ParseStreamValues/ndjson` | 7.16 ms | 3.77 ms | 1.90× | 2.06× | + | `ParseStreamValues/numbers` | 1.93 ms | 383 µs | 5.03× | 6.06× | + | `ParseString/canada` | 15.5 ms | 4.63 ms | 3.35× | 6.13× | + | `ParseString/citm_catalog` | 7.56 ms | 1.78 ms | 4.25× | 3.46× | + | `ParseString/floats` | 122 ms | 28.3 ms | 4.30× | 8.68× | + | `ParseString/jeopardy` | 317 ms | 131 ms | 2.42× | 2.32× | + | `ParseString/signed_ints` | 123 ms | 32 ms | 3.84× | 4.29× | + | `ParseString/small_signed_ints` | 62.7 ms | 25 ms | 2.51× | 3.38× | + | `ParseString/twitter` | 3.3 ms | 1.05 ms | 3.14× | 2.60× | + | `ParseString/unsigned_ints` | 121 ms | 32.9 ms | 3.68× | 4.23× | + | `ParseStringOrdered/canada` | 15.4 ms | 4.53 ms | 3.40× | 6.21× | + | `ParseStringOrdered/citm_catalog` | 11.5 ms | 1.68 ms | 6.85× | 6.59× | + | `ParseStringOrdered/jeopardy` | 374 ms | 113 ms | 3.29× | 3.38× | + | `ParseStringOrdered/twitter` | 4.6 ms | 949 µs | 4.85× | 4.93× | + | `Patch/canada` | 10.4 ms | 3.48 ms | 2.98× | 2.46× | + | `Patch/citm_catalog` | 2.75 ms | 1.74 ms | 1.58× | 1.38× | + | `Patch/twitter` | 1.58 ms | 889 µs | 1.78× | 1.45× | + | `SaxParse/canada` | 13.1 ms | 3.27 ms | 4.01× | 8.84× | + | `SaxParse/citm_catalog` | 6.55 ms | 967 µs | 6.77× | 6.85× | + | `SaxParse/twitter` | 2.53 ms | 483 µs | 5.24× | 5.91× | + | `ToCbor/canada` | 1.41 ms | 557 µs | 2.54× | 2.27× | + | `ToCbor/citm_catalog` | 1.05 ms | 259 µs | 4.04× | 5.60× | + | `ToCbor/floats` | 9.05 ms | 1.9 ms | 4.76× | 1.94× | + | `ToCbor/jeopardy` | 73.9 ms | 22.1 ms | 3.35× | 2.87× | + | `ToCbor/signed_ints` | 11.5 ms | 2.83 ms | 4.08× | 1.83× | + | `ToCbor/small_signed_ints` | 10.4 ms | 2.48 ms | 4.19× | 2.78× | + | `ToCbor/twitter` | 659 µs | 143 µs | 4.59× | 6.67× | + | `ToCbor/unsigned_ints` | 8.18 ms | 2.82 ms | 2.90× | 1.48× | + | `ToJsonStrings/copy` | 6.12 ms | 5.65 ms | 1.08× | 1.05× | + | `ToJsonStrings/move` | 6.13 ms | 3.13 ms | 1.96× | 1.78× | + | `Unflatten/canada` | 42.5 ms | 11.1 ms | 3.83× | 4.32× | + | `Unflatten/citm_catalog` | 10.2 ms | 3.62 ms | 2.81× | 3.32× | + | `Unflatten/twitter` | 4.75 ms | 2.21 ms | 2.15× | 2.42× | + +### C. The timeline + +The other four workloads we followed: + +- `accept()` of `twitter.json`: the lexer alone, since `accept()` only validates and builds nothing; +- `parse()` of `twitter.json` from an `std::ifstream`: reading from a stream instead of a string; +- `dump()` of `canada.json`: writing floating-point numbers; +- `to_cbor()` of `twitter.json`: writing a binary format. + +
+
+--8<-- "images/perf_blog_timeline_accept_twitter.svg" +
+
+--8<-- "images/perf_blog_timeline_parse_twitter_ifstream.svg" +
+
+--8<-- "images/perf_blog_timeline_dump_canada.svg" +
+
+--8<-- "images/perf_blog_timeline_to_cbor_twitter.svg" +
+
+ +

Speedup over 3.12.0 after each commit that changed the headers, for the four workloads +not shown in the timeline section. More is better; the badges are theme numbers.

+ +The parse panels include destroying the result: the benchmark returns `json::parse(text).size()`, so the changes to the +destructor ([#5762][5762], [#5835][5835]) show up there too, as steps of up to 6% in either direction. When `accept()` +of `twitter.json` got 2.5% slower over the last 20 commits, we timed the two ends against each other in one binary with +six code layouts: they were equal within 0.2%. + +| workload | theme | pull request | change | step | +| --- | :-: | --- | --- | --: | +| `parse()` `citm_catalog.json` | 4 | [#5234][5234] | the token buffer is filled only for error messages | −35% | +| | 1 | [#5283][5283] | fast paths for contiguous input | −19% | +| | 4 | [#5592][5592] | check for the expected `:` or `,` before the lexer's token switch | −7% | +| | 4 | [#5809][5809] | positions derived only on error | −12% | +| | 2 | [#5810][5810] | indentation skipped eight bytes at a time | −12% | +| | 4 | [#5882][5882] | arrays allocated once, at their final size | −6% | +| `parse()` `canada.json` | 4 | [#5234][5234] | the token buffer is filled only for error messages | −10% | +| | 1 | [#5283][5283] | fast paths for contiguous input | −24% | +| | 3 | [#5617][5617] | Eisel-Lemire instead of `strtod` | −9% | +| | 3 | [#5738][5738] | own float parser, string scan, `\u` table | −14% | +| | 3 | [#5851][5851] | digits accumulated while validating, eight at a time | −12% | +| | 4 | [#5882][5882] | arrays allocated once, at their final size | −15% | +| `accept()` `twitter.json` | 4 | [#5234][5234] | the token buffer is filled only for error messages | −18% | +| | 1 | [#5283][5283] | fast paths for contiguous input | −53% | +| | 4 | [#5592][5592] | check for the expected `:` or `,` before the lexer's token switch | −11% | +| | 4 | [#5809][5809] | positions derived only on error | −23% | +| | 2 | [#5810][5810] | indentation skipped eight bytes at a time | −9% | +| | 2 | [#5853][5853] | strings scanned 16 bytes at a time with SSE2 or NEON | −11% | +| `parse()` `twitter.json`, `std::ifstream` | 1 | [#5828][5828] | scanning the stream's get area in bulk | −48% | +| | 1 | [#5884][5884] | inline get-area path, binary reads | −5% | +| `dump()` `twitter.json` | 6 | [#5285][5285] | a write buffer and bulk copies of strings | −70% | +| | 2 | [#5738][5738] | own float parser, string scan, `\u` table | −19% | +| | 2 | [#5878][5878] | short strings checked with a table | −6% | +| | 2 | [#5883][5883] | strings of 16–32 bytes as two overlapping vectors | −34% | +| `dump()` `canada.json` | 6 | [#5285][5285] | a write buffer and bulk copies of strings | −8% | +| | 3 | [#5634][5634] | Żmij instead of Grisu2 | −65% | +| `from_cbor()` `twitter.json` | 1 | [#5233][5233] | binary strings read in bulk | −32% | +| | 4 | [#5501][5501] | the result moved instead of copied | −33% | +| | U | [#5185][5185], [#5531][5531] | UTF-8 validation of every text string | +37% | +| | U | [#5746][5746] | the validation made an option ([#5741][5741]) | −27% | +| `to_cbor()` `twitter.json` | 4 | [#5328][5328] | no temporary `basic_json` per object key (by [@alexprabhat99](https://github.com/alexprabhat99)) | −55% | +| | 6 | [#5824][5824] | a cursor instead of `vector::insert()` | −38% | +| | 6 | [#5885][5885] | runs of numbers encoded in a loop | −32% | + +

The labeled steps of the timeline: the change in time at the first commit of each +pull request, against the commit before it. [#5592][5592] is by [@mvanslobbe](https://github.com/mvanslobbe).

+ +### D. Algorithmic fixes + +| operation | 3.12.0 | 3.13.0 | speedup | cause | PR | +| --- | --: | --: | --: | --- | --- | +| `diff()` of an array of 64,000 numbers against an empty array | 4,237 ms | 10.8 ms | 394× | each `remove` was inserted at the front of the patch | [#5461][5461] | +| `diff()` of an array of 20,000 objects against every second one of them | 122 ms | 4.13 ms | 29× | the same | [#5461][5461] | +| `parse()` with a callback that rejects half of 32,000 objects | 1,398 ms | 12.1 ms | 116× | each rejected value was searched for from the start of its parent | [#5457][5457] | +| `<` on two equal values nested 24 levels deep (C++11 to C++17) | 64.4 ms | 0.002 ms | exponential | `std::vector`'s `<` asks `a < b` and `b < a`, and both recurse | [#5390][5390] | +| `<` on `citm_catalog.json` and a copy, 10× (C++11 to C++17) | 284 ms | 3.94 ms | 72× | the same | [#5390][5390] | +| `flatten()` of `citm_catalog.json` as `ordered_json` | 271 ms | 1.45 ms | 187× | every new key was looked up linearly | [#5834][5834] | +| `to_bson()` of a value nested 200 levels deep, 100× | 20.3 ms | 0.352 ms | 58× | each document's size was computed by walking everything below it again | [#5553][5553], [#5979][5979] | +| 100,000 × `push_back()` on an `ordered_json` with [`JSON_DIAGNOSTICS`](../../api/macros/json_diagnostics.md) | 1,589 ms | 5.32 ms | 299× | every insert re-pointed the parent pointers of all elements | [#5832][5832] | +| 10,000 × `at(i)` on an `ordered_json` array with `JSON_DIAGNOSTICS` | 45.9 ms | 0.088 ms | 522× | the same | [#5832][5832] | + +

Operations that were quadratic or worse in 3.12.0, timed with both versions (C++17, +`-O3`, median of 3 interleaved runs).

+ +### E. Comparison with other libraries + +**Method.** The programs are in +[`tests/benchmarks/json_view/others`](https://github.com/nlohmann/json/tree/develop/tests/benchmarks/json_view/others), +whose README lists every variant, the pinned versions and checksums of every library, and the build commands. The +libraries: [yyjson](https://github.com/ibireme/yyjson) 0.13.0, [simdjson](https://github.com/simdjson/simdjson) 5.1.1, +[sonic-cpp](https://github.com/bytedance/sonic-cpp) 1.0.2, [RapidJSON](https://github.com/Tencent/rapidjson) (master, +24b5e7a, as its last release is from 2016), [Glaze](https://github.com/stephenberry/glaze) 9.1.0, +[Boost.JSON](https://github.com/boostorg/json) 1.92, and in Rust [sonic-rs](https://github.com/cloudwego/sonic-rs) +0.5.10, [simd-json](https://github.com/simd-lite/simd-json) 0.19.0 and [serde_json](https://github.com/serde-rs/json) +1.0.154. C++23 with `-O3`; on the Mac Apple clang 21 (the compiler of the current Xcode), on x86-64 GCC 16.2, GCC 13.4 +and Clang 23 with `-march=haswell` on Ubuntu 26.04, pinned to one core; Rust 1.99 with `-C target-cpu=haswell` on +x86-64. The Rust times on the Mac are from October 29; the Rust programs haven't changed since. Every variant runs in +every round, in a different order each round (a shuffle with a fixed seed), each timed call after an untimed one; the +time is the best of 2 × 30 rounds (2 × 6 for `jeopardy.json`). Boost.JSON uses a monotonic resource and precise number +parsing, RapidJSON `kParseFullPrecisionFlag` (except in *validate*, which reads no number), serde_json +`float_roundtrip`: every number a library converts has to be exact. That rule, like the others here, is our choice. +Between the two runs, a library's time relative to `json_document`'s moved by 0.8% at the median and 2.5% at the 95th +percentile on the Mac, and by 2.5–3% and 9–10% on x86-64. + +**Validation levels.** A way validates fully if it rejects all four broken inputs (cut short by one byte, a stray comma, +an invalid UTF-8 byte in a string, garbage after the value); "U" accepts the invalid UTF-8 byte; "P" accepts one of the +other three. The probes separate the ways that check everything from those that check less; JSONTestSuite is the +conformance check. sonic-cpp 1.0.2 does not check UTF-8. RapidJSON does only with `kParseValidateEncodingFlag`, and +serde_json reading into `IgnoredAny` or structs from bytes doesn't check the strings it skips, unless the input is +checked with `std::str::from_utf8` first; both are shown both ways. simdjson's On-Demand API, Glaze's `lazy_json`, +`simdjson::minify()` and Glaze's `minify_json()` don't validate what they skip, Glaze's structs only with +`validate_skipped`, and Glaze's generic reader rejects garbage after the value only with `validate_trailing_whitespace` +(its strict variants also set `escape_control_characters`, without which it writes control characters unescaped). + +**Conformance.** Every *validate* way ran the 318 files of [JSONTestSuite](https://github.com/nst/JSONTestSuite), on the +Mac with the headers of November 3 and on x86-64 with those of October 30 (the Mac's results didn't change). No way +rejected a file that must be accepted. Of those that must be rejected, a few got through: `123` followed by a NUL byte +in nlohmann/json and RapidJSON (nlohmann/json treats NUL as the end of the input; +[`JSON_STRICT_NUL_HANDLING`](../../api/macros/json_strict_nul_handling.md) changes that for `json` and `json_document`), +an incomplete UTF-8 byte-order mark in RapidJSON, an invalid `\u` escape in sonic-rs's `IgnoredAny`, and, in 17 files, +garbage after the value in Glaze's generic reader without `validate_trailing_whitespace`. sonic-rs, and RapidJSON's SAX +reader with GCC 16.2 on x86-64, crash with a stack overflow on 100,000 nested arrays. Neither machine has AVX-512, so +simdjson's fastest kernel never ran, and yyjson and simdjson are compiled as separate files without link-time +optimization, while the header-only libraries inline into the benchmark. Built with link-time optimization, and simdjson +as C++23 like the rest, they moved by less than 3% against `json_document` on average (Apple clang and GCC 16). + +**Choices.** A library's time is its fastest fully validating way per file; "(U …)", "(P …)" and "(N …)" give a faster +way that checks or does less. A cell of the figures is the geometric mean of a library's four times, divided by the +smallest such mean in its column. Variants that keep a parser or document across calls are measured but not chosen, and +so are in-place ways with the copy made before the timer starts; with every library reused, the first place in each +column stays the same. Variants that leave numbers unconverted while reading are chosen where they pass the checks +(yyjson's and RapidJSON's raw numbers, Boost.JSON's `number_precision::none`). Variants that write each number by +copying its text instead of formatting it (`json_document` with `number_format::source`, yyjson's and RapidJSON's raw +numbers) count as doing less, "N": their output keeps the source's spelling of each number. They matter most for +`canada.json`. Glaze's `generic` with `double` numbers fails the checks wherever it has to write the 64-bit ids of +`twitter.json`. The struct variants of nlohmann/json, Glaze, simdjson, and serde read into the same types; Boost.JSON's +`parse_into` has no type that skips a value, so it holds a little more. + +
+--8<-- "images/perf_blog_usecases_x86-clang.svg" +
+ +

The use cases on the x86-64 server with Clang 23. Less is better; hover over or tap a +cell for the times and the way.

+ +
+--8<-- "images/perf_blog_usecases_x86-gcc13.svg" +
+ +

The use cases on the x86-64 server with GCC 13.4. Less is better; hover over or tap a +cell for the times and the way.

+ +??? info "Times in µs on the Apple M1 Max" + + **validate** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | accept | 170 | 313 | 886 | 20,873 | 0.9 | + | yyjson | insitu (copy untimed) | 172 | 451 | 1,457 | 30,240 | 0.9 | + | simdjson | DOM | 212 | 452 | 1,888 | 28,843 | 1.1 | + | sonic-rs (Rust) | Value | 326 | 681 | 1,939 | 31,450 | 1.4 | + | Glaze | validate_json | 331 | 862 | 1,326 | 45,192 | 1.4 | + | simd-json (Rust) | tape (copy) | 289 | 698 | 2,278 | 38,874 | 1.7 | + | sonic-cpp | Document [U] | – (U 382) | – (U 985) | – (U 2,578) | – (U 41,617) | – (U 1.6) | + | serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 452 (U 354) | 1,103 (U 1,047) | 1,556 (U 1,451) | 46,517 (U 44,984) | 2.0 (U 1.7) | + | Boost.JSON | SAX, SAX (numbers: none) | 535 | 994 | 1,467 | 53,939 | 2.3 | + | nlohmann/json `json` | accept | 451 | 888 | 2,405 | 55,286 | 2.4 | + | RapidJSON | SAX (default precision), SAX (string stream, default precision), SAX (string stream, default precision) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,307 (U 686) | 1,397 (U 1,032) | 1,982 | 134,679 (U 63,589) | 6.0 (U 2.6) | + + **sum** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse | 224 | 485 | 1,816 | 28,987 | 1.2 | + | yyjson | insitu (copy untimed) | 219 | 551 | 1,906 | 37,512 | 1.1 | + | simdjson | DOM, On-Demand | 249 | 571 | 2,374 | 35,111 | 1.3 | + | sonic-rs (Rust) | visitor | 364 | 778 | 2,703 | 41,361 | 1.7 | + | simd-json (Rust) | visitor (copy) | 354 | 866 | 2,717 | 47,518 | 2.0 | + | sonic-cpp | Document [U] | – (U 428) | – (U 1,087) | – (U 2,993) | – (U 48,688) | – (U 1.9) | + | nlohmann/json `json` | sax | 465 | 925 | 3,072 | 64,089 | 2.4 | + | Boost.JSON | SAX | 535 | 1,010 | 3,067 | 53,704 | 2.3 | + | serde_json (Rust) | visitor | 652 | 1,242 | 4,772 | 66,568 | 2.5 | + | Glaze | generic (double) [P], generic (double, strict), lazy_json [P] | 968 | 2,049 | 6,331 | 99,763 | 4.9 (P 3.5) | + | RapidJSON | SAX, SAX (string stream), SAX (string stream) (no encoding check) [U], insitu (copy untimed) (no encoding check) [U] | 1,329 (U 735) | 1,455 (U 1,136) | 6,453 | 136,103 (U 69,604) | 6.1 (U 2.9) | + + **select** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse | 184 | 363 | 956 | 24,991 | 1.0 | + | yyjson | insitu (copy untimed) | 178 | 456 | 1,461 | 32,514 | 1.0 | + | simdjson | DOM, On-Demand (key selectors) [P], On-Demand [P], On-Demand structs [P] | 196 (P 127) | 450 (P 354) | 1,886 (P 566) | 30,504 (P 19,562) | 1.2 (P 0.8) | + | Glaze | structs (validate_skipped), structs [P] | 311 (P 241) | 854 (P 255) | 1,316 (P 313) | 46,924 (P 37,578) | 1.4 (P 1.2) | + | sonic-rs (Rust) | Value | 333 | 691 | 1,936 | 40,660 | 1.7 | + | sonic-cpp | Document [U] | – (U 385) | – (U 990) | – (U 2,586) | – (U 45,858) | – (U 1.7) | + | simd-json (Rust) | structs (copy) | 364 | 914 | 2,657 | 57,697 | 2.1 | + | serde_json (Rust) | from_utf8 + structs, structs [U] | 480 (U 410) | 1,125 (U 1,084) | 1,560 (U 1,455) | 62,378 | 2.3 (U 1.9) | + | Boost.JSON | parse, parse_into structs | 617 | 1,205 | 3,650 | 67,255 | 2.7 | + | RapidJSON | Document (string stream), insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,304 (U 679) | 1,554 (U 1,126) | 6,776 | 141,509 (U 65,625) | 6.5 (U 2.6) | + | nlohmann/json `json` | parse, structs (from_json) | 1,360 | 2,416 | 6,047 | 179,533 | 7.6 | + + **edit** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | editable, editable (source numbers) [N] | 291 | 560 | 2,765 (N 1,484) | 58,057 | 1.9 | + | yyjson | insitu (copy untimed) + mut copy | 427 | 882 | 3,642 | 84,239 | 2.4 | + | sonic-cpp | Document [U] | – (U 486) | – (U 1,224) | – (U 5,638) | – (U 62,688) | – (U 2.6) | + | sonic-rs (Rust) | Value | 634 | 1,257 | 4,396 | 140,936 | 3.8 | + | simd-json (Rust) | borrowed (copy) | 948 | 2,102 | 7,654 | 110,693 | 5.4 | + | Boost.JSON | parse | 1,368 | 1,992 | 6,573 | 155,237 | 6.6 | + | nlohmann/json `json` | ordered_json, parse | 1,273 | 2,344 | 8,334 | 203,232 | 7.1 | + | Glaze | generic (strict), generic [P] | 1,539 | 3,235 | 11,083 | 178,333 | 8.3 | + | RapidJSON | Document, Document (string stream), insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,922 (U 1,344) | 2,388 (U 1,964) | 13,836 | 221,270 (U 144,741) | 10.3 (U 6.5) | + | serde_json (Rust) | Value | 2,009 | 3,316 | 9,666 | 251,931 | 9.6 | + + **minify** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse + dump, parse + dump (source numbers) [N] | 259 | 493 | 2,582 (N 1,360) | 37,882 | 1.4 | + | yyjson | insitu (copy untimed) + write, read (raw numbers) + write [N] | 279 | 625 | 3,196 (N 2,550) | 50,821 | 1.6 | + | simdjson | DOM + to_string, minify [P] | 423 (P 62.3) | 848 (P 171) | 5,120 (P 227) | 61,059 (P 5,762) | 2.4 (P 0.3) | + | sonic-rs (Rust) | Value | 535 | 1,134 | 4,377 | 64,832 | 3.0 | + | sonic-cpp | Document + Serialize [U] | – (U 500) | – (U 1,220) | – (U 5,676) | – (U 61,236) | – (U 2.5) | + | simd-json (Rust) | borrowed (copy) | 952 | 2,111 | 7,658 | 108,130 | 5.5 | + | Boost.JSON | parse + serialize | 1,393 | 1,986 | 6,542 | 154,677 | 6.7 | + | RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (raw numbers) (no encoding check) [U N], SAX to Writer (string stream), SAX to Writer (string stream) (no encoding check) [U] | 1,525 (U 1,058) | 1,808 (U 1,485) | 14,460 (U N 10,908) | 174,558 (U 123,119) | 8.1 (U 5.0) | + | nlohmann/json `json` | parse + dump | 1,600 | 2,706 | 8,389 | 197,745 | 8.8 | + | Glaze | generic (strict), minify_json [P] | 1,505 (P 281) | 3,225 (P 729) | 11,092 (P 1,722) | 168,855 (P 39,976) | 8.1 (P 1.3) | + | serde_json (Rust) | Value | 2,004 | 3,290 | 9,792 | 227,369 | 9.5 | + + **write** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | dump, dump (source numbers) [N] | 74.3 | 134 | 1,621 (N 401) | 14,757 | 0.5 | + | yyjson | write | 103 | 169 | 1,731 | 20,087 | 0.7 | + | sonic-cpp | Serialize | 108 | 230 | 3,093 | 19,651 | 0.8 | + | nlohmann/json `json` | dump | 223 | 287 | 2,276 | 31,825 | 1.2 | + | simdjson | to_string | 199 | 385 | 3,241 | 32,208 | 1.3 | + | Glaze | generic, generic (strict) | 216 | 469 | 1,720 | 33,934 | 1.3 | + | sonic-rs (Rust) | Value | 212 | 446 | 2,419 | 33,366 | 1.5 | + | serde_json (Rust) | Value | 322 | 490 | 2,286 | 49,967 | 2.0 | + | simd-json (Rust) | borrowed | 355 | 478 | 2,728 | 47,412 | 1.8 | + | Boost.JSON | serialize | 507 | 508 | 2,923 | 62,583 | 2.9 | + | RapidJSON | Writer | 603 | 830 | 6,995 | 81,150 | 3.9 | + +??? info "Times in µs on x86-64 with GCC 16.2" + + **validate** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | accept | 258 | 513 | 934 | 34,514 | 1.2 | + | yyjson | insitu (copy untimed), read (raw numbers) | 352 | 837 | 2,199 | 93,043 | 1.5 | + | sonic-rs (Rust) | IgnoredAny | 501 | 970 | 2,249 | 54,369 | 1.8 | + | Boost.JSON | SAX, SAX (numbers: none) | 690 | 917 | 1,676 | 62,781 | 2.9 | + | simdjson | DOM | 301 | 695 | 3,337 | 120,982 | 1.7 | + | sonic-cpp | Document [U] | – (U 403) | – (U 932) | – (U 3,349) | – (U 98,511) | – (U 1.7) | + | serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 624 (U 484) | 1,440 (U 1,370) | 2,406 (U 2,314) | 64,720 (U 58,247) | 2.4 (U 1.9) | + | Glaze | validate_json | 712 | 1,983 | 2,625 | 76,759 | 2.5 | + | nlohmann/json `json` | accept | 683 | 1,419 | 4,559 | 74,331 | 3.1 | + | simd-json (Rust) | tape (copy) | 567 | 1,430 | 4,359 | 207,551 | 2.9 | + | RapidJSON | SAX (default precision) (no encoding check) [U], SAX (string stream, default precision), SAX (string stream, default precision) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,166 (U 1,012) | 1,553 (U 1,434) | 3,875 | 114,704 (U 102,635) | 4.8 (U 3.2) | + + **sum** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | simdjson | On-Demand | 348 | 805 | 3,452 | 92,769 | 1.9 | + | **nlohmann/json `json_document`** | parse | 398 | 972 | 3,501 | 89,756 | 2.0 | + | yyjson | insitu (copy untimed) | 415 | 986 | 3,818 | 97,586 | 1.9 | + | sonic-rs (Rust) | visitor | 501 | 1,123 | 4,397 | 59,583 | 2.5 | + | sonic-cpp | Document [U] | – (U 456) | – (U 1,115) | – (U 3,980) | – (U 105,081) | – (U 2.0) | + | Boost.JSON | SAX | 699 | 957 | 5,835 | 59,656 | 3.0 | + | nlohmann/json `json` | sax | 814 | 1,666 | 5,690 | 97,414 | 4.0 | + | simd-json (Rust) | visitor (copy) | 681 | 1,650 | 5,083 | 210,185 | 3.5 | + | RapidJSON | SAX (string stream), SAX (string stream) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,221 (U 1,063) | 1,717 (U 1,635) | 9,435 | 112,158 (U 105,845) | 5.1 (U 3.5) | + | serde_json (Rust) | visitor | 1,311 | 2,288 | 7,127 | 129,497 | 4.6 | + | Glaze | generic (double) [P], generic (double, strict), lazy_json [P] | 2,483 | 4,413 | 10,532 | 231,505 | 8.5 (P 6.4) | + + **select** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse, structs (from_json) | 333 | 828 | 1,368 | 89,876 | 1.7 | + | yyjson | insitu (copy untimed), read (raw numbers) | 366 | 840 | 2,204 | 96,172 | 1.7 | + | sonic-rs (Rust) | structs | 504 | 1,033 | 2,328 | 90,486 | 2.0 | + | simdjson | DOM, On-Demand (key selectors) [P], On-Demand [P] | 313 (P 180) | 699 (P 496) | 3,325 (P 690) | 122,556 (P 48,272) | 1.9 (P 1.1) | + | sonic-cpp | Document [U] | – (U 407) | – (U 948) | – (U 3,464) | – (U 110,885) | – (U 1.8) | + | serde_json (Rust) | from_utf8 + structs, structs [U] | 701 | 1,532 | 2,529 (U 2,402) | 107,316 | 3.0 | + | Glaze | structs (validate_skipped), structs [P] | 606 (P 344) | 2,476 (P 402) | 2,557 (P 417) | 89,957 (P 67,467) | 2.1 (P 1.5) | + | simd-json (Rust) | structs (copy) | 679 | 1,731 | 5,144 | 239,164 | 3.5 | + | Boost.JSON | parse, parse_into structs | 887 | 1,270 | 7,292 | 95,866 | 3.7 | + | RapidJSON | Document (string stream), insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,180 (U 1,022) | 1,693 | 10,390 | 116,394 (U 108,290) | 4.9 (U 3.4) | + | nlohmann/json `json` | parse, structs (from_json) | 3,360 | 5,268 | 12,006 | 410,221 | 17.7 | + + **edit** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | editable, editable (source numbers) [N] | 536 | 1,162 | 5,567 (N 2,188) | 192,323 | 3.0 | + | sonic-cpp | Document [U] | – (U 620) | – (U 1,438) | – (U 8,495) | – (U 186,078) | – (U 3.4) | + | yyjson | insitu (copy untimed) + mut copy | 746 | 1,526 | 7,479 | 275,025 | 3.6 | + | sonic-rs (Rust) | Value | 1,197 | 2,389 | 7,744 | 390,952 | 6.9 | + | Boost.JSON | parse | 1,767 | 2,493 | 12,767 | 331,310 | 8.5 | + | RapidJSON | Document (string stream), insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,865 (U 1,737) | 2,616 | 18,812 | 245,724 (U 234,669) | 8.7 (U 7.2) | + | simd-json (Rust) | borrowed (copy), owned (copy) | 1,862 | 4,194 | 14,896 | 391,369 | 9.0 | + | nlohmann/json `json` | ordered_json | 2,832 | 4,970 | 15,806 | 647,704 | 13.1 | + | Glaze | generic (strict), generic [P] | 3,389 | 6,002 | 21,598 | 607,767 | 14.8 | + | serde_json (Rust) | Value | 4,042 | 6,586 | 16,631 | 632,766 | 17.6 | + + **minify** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse + dump, parse + dump (source numbers) [N] | 518 (N 496) | 1,045 | 5,240 (N 2,196) | 143,737 | 2.5 (N 2.4) | + | yyjson | insitu (copy untimed) + write, insitu (copy) + write, read (raw numbers) + write [N] | 626 | 1,160 | 6,701 (N 2,901) | 156,605 | 2.8 | + | sonic-cpp | Document + Serialize [U] | – (U 675) | – (U 1,417) | – (U 8,958) | – (U 164,630) | – (U 3.3) | + | simdjson | DOM + to_string, minify [P] | 714 (P 99.9) | 1,318 (P 278) | 9,135 (P 312) | 269,597 (P 42,644) | 3.7 (P 0.5) | + | sonic-rs (Rust) | Value | 1,000 | 2,097 | 7,795 | 215,280 | 5.4 | + | Boost.JSON | parse + serialize | 1,974 | 2,525 | 12,748 | 314,299 | 8.6 | + | RapidJSON | SAX to Writer (raw numbers) [N], SAX to Writer (string stream), SAX to Writer (string stream) (no encoding check) [U] | 1,949 (U 1,880) | 2,382 | 19,548 (N 14,400) | 231,979 (U 224,249) | 8.2 (U 6.2) | + | simd-json (Rust) | borrowed (copy) | 1,889 | 4,196 | 15,716 | 414,377 | 9.2 | + | Glaze | generic (strict), minify_json [P] | 3,685 (P 442) | 5,942 (P 1,292) | 22,138 (P 2,726) | 450,322 (P 97,377) | 14.0 (P 1.9) | + | serde_json (Rust) | Value | 4,012 | 6,583 | 17,306 | 509,702 | 16.5 | + | nlohmann/json `json` | parse + dump | 4,196 | 5,806 | 16,626 | 529,560 | 19.2 | + + **write** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | dump, dump (source numbers) [N] | 156 (N 140) | 251 (N 230) | 3,842 (N 823) | 67,769 (N 65,376) | 0.9 (N 0.8) | + | yyjson | write | 215 | 319 | 3,360 | 66,669 | 1.3 | + | sonic-cpp | Serialize | 249 | 509 | 5,074 | 69,916 | 1.6 | + | nlohmann/json `json` | dump | 444 | 640 | 4,089 | 117,316 | 1.8 | + | simdjson | to_string | 361 | 614 | 5,609 | 158,492 | 1.8 | + | Glaze | generic | 381 | 730 | 4,071 | 131,946 | 2.0 | + | sonic-rs (Rust) | Value | 434 | 927 | 3,987 | 109,176 | 2.8 | + | Boost.JSON | serialize | 469 | 830 | 5,659 | 144,174 | 2.4 | + | simd-json (Rust) | borrowed | 582 | 800 | 5,147 | 122,623 | 2.8 | + | serde_json (Rust) | Value | 550 | 887 | 4,005 | 134,163 | 3.3 | + | RapidJSON | Writer | 678 | 979 | 9,095 | 131,408 | 3.8 | + +??? info "Times in µs on x86-64 with GCC 13.4" + + **validate** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | accept | 271 | 609 | 1,011 | 34,722 | 1.2 | + | sonic-rs (Rust) | IgnoredAny | 501 | 970 | 2,249 | 54,369 | 1.8 | + | yyjson | insitu (copy untimed), read (raw numbers) | 348 | 878 | 2,256 | 90,959 | 1.6 | + | Boost.JSON | SAX, SAX (numbers: none) | 710 | 969 | 1,718 | 61,476 | 3.2 | + | simdjson | DOM | 311 | 780 | 3,351 | 116,704 | 1.8 | + | Glaze | validate_json | 590 | 1,545 | 1,980 | 76,009 | 2.3 | + | sonic-cpp | Document [U] | – (U 408) | – (U 1,028) | – (U 3,622) | – (U 96,080) | – (U 1.6) | + | serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 624 (U 484) | 1,440 (U 1,370) | 2,406 (U 2,314) | 64,720 (U 58,247) | 2.4 (U 1.9) | + | nlohmann/json `json` | accept | 677 | 1,433 | 4,584 | 73,561 | 3.3 | + | simd-json (Rust) | tape (copy) | 567 | 1,430 | 4,359 | 207,551 | 2.9 | + | RapidJSON | SAX (default precision) (no encoding check) [U], SAX (string stream, default precision), insitu (copy untimed), insitu (copy untimed) (no encoding check) [U], insitu (copy) (no encoding check) [U] | 1,552 (U 1,082) | 2,210 (U 1,570) | 4,104 | 168,747 (U 110,856) | 6.9 (U 3.7) | + + **sum** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | simdjson | On-Demand | 356 | 812 | 3,435 | 96,250 | 2.0 | + | **nlohmann/json `json_document`** | parse | 392 | 946 | 3,888 | 89,044 | 2.0 | + | sonic-rs (Rust) | visitor | 501 | 1,123 | 4,397 | 59,583 | 2.5 | + | sonic-cpp | Document [U] | – (U 460) | – (U 1,210) | – (U 4,295) | – (U 107,092) | – (U 1.9) | + | yyjson | insitu (copy untimed) | 407 | 1,045 | 6,021 | 99,764 | 2.0 | + | Boost.JSON | SAX | 734 | 1,030 | 6,103 | 64,382 | 3.3 | + | nlohmann/json `json` | sax | 797 | 1,548 | 6,004 | 101,516 | 4.0 | + | simd-json (Rust) | visitor (copy) | 681 | 1,650 | 5,083 | 210,185 | 3.5 | + | serde_json (Rust) | visitor | 1,311 | 2,288 | 7,127 | 129,497 | 4.6 | + | RapidJSON | SAX (no encoding check) [U], SAX (string stream), SAX (string stream) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,616 (U 1,130) | 2,290 (U 1,743) | 11,183 | 181,500 (U 119,706) | 7.5 (U 3.9) | + | Glaze | generic (double) [P], generic (double, strict), lazy_json [P] | 2,345 | 4,080 | 10,576 | 250,685 (P 231,181) | 9.0 (P 6.4) | + + **select** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse | 332 | 765 | 1,390 | 88,202 | 1.6 | + | yyjson | insitu (copy untimed), read (raw numbers) | 361 | 880 | 2,236 | 98,637 | 1.7 | + | sonic-rs (Rust) | structs | 504 | 1,033 | 2,328 | 90,486 | 2.0 | + | simdjson | DOM, On-Demand (key selectors) [P], On-Demand [P] | 324 (P 184) | 756 (P 509) | 3,409 (P 700) | 123,214 (P 48,614) | 2.0 (P 1.2) | + | Glaze | structs (validate_skipped), structs [P] | 529 (P 342) | 1,435 (P 410) | 1,913 (P 431) | 91,253 (P 66,069) | 2.0 (P 1.5) | + | sonic-cpp | Document [U] | – (U 413) | – (U 1,043) | – (U 3,695) | – (U 108,297) | – (U 1.7) | + | serde_json (Rust) | from_utf8 + structs, structs [U] | 701 | 1,532 | 2,529 (U 2,402) | 107,316 | 3.0 | + | simd-json (Rust) | structs (copy) | 679 | 1,731 | 5,144 | 239,164 | 3.5 | + | Boost.JSON | parse, parse_into structs | 884 | 1,380 | 7,217 | 99,078 | 3.9 | + | RapidJSON | Document (string stream) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,560 (U 1,079) | 2,127 (U 1,817) | 11,547 | 176,066 (U 122,354) | 7.1 (U 3.7) | + | nlohmann/json `json` | structs (from_json) | 3,325 | 5,126 | 11,908 | 423,362 | 17.0 | + + **edit** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | editable, editable (source numbers) [N] | 532 | 1,116 | 5,714 (N 2,702) | 192,363 | 3.1 | + | sonic-cpp | Document [U] | – (U 637) | – (U 1,559) | – (U 8,936) | – (U 186,232) | – (U 3.3) | + | yyjson | insitu (copy untimed) + mut copy | 761 | 1,590 | 9,860 | 271,227 | 3.7 | + | sonic-rs (Rust) | Value | 1,197 | 2,389 | 7,744 | 390,952 | 6.9 | + | Boost.JSON | parse | 1,963 | 2,936 | 13,414 | 356,244 | 9.1 | + | simd-json (Rust) | borrowed (copy), owned (copy) | 1,862 | 4,194 | 14,896 | 391,369 | 9.0 | + | RapidJSON | Document (string stream) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U], insitu (copy) | 2,333 (U 1,838) | 3,133 (U 2,836) | 20,518 | 315,892 (U 271,888) | 11.0 (U 7.7) | + | nlohmann/json `json` | ordered_json | 2,912 | 4,999 | 15,603 | 604,744 | 13.5 | + | Glaze | generic (strict), generic [P] | 3,525 | 6,551 | 23,644 | 661,941 (P 632,543) | 15.6 | + | serde_json (Rust) | Value | 4,042 | 6,586 | 16,631 | 632,766 | 17.6 | + + **minify** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse + dump, parse + dump (source numbers) [N], parse_copy + dump | 483 | 1,014 | 5,459 (N 2,620) | 146,320 | 2.4 | + | yyjson | insitu (copy untimed) + write, read (raw numbers) + write [N], read + write | 592 | 1,205 | 9,008 (N 3,106) | 158,577 | 2.9 | + | sonic-cpp | Document + Serialize [U] | – (U 695) | – (U 1,541) | – (U 8,838) | – (U 168,901) | – (U 3.3) | + | simdjson | DOM + to_string, minify [P] | 742 (P 123) | 1,393 (P 337) | 8,808 (P 433) | 266,718 (P 47,040) | 3.8 (P 0.6) | + | sonic-rs (Rust) | Value | 1,000 | 2,097 | 7,795 | 215,280 | 5.4 | + | Boost.JSON | parse + serialize | 2,086 | 2,919 | 13,974 | 334,468 | 9.2 | + | simd-json (Rust) | borrowed (copy) | 1,889 | 4,196 | 15,716 | 414,377 | 9.2 | + | RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U], SAX to Writer (raw numbers) (no encoding check) [U N], SAX to Writer (string stream), SAX to Writer (string stream) (no encoding check) [U] | 3,015 (U 1,978) | 3,012 (U 2,493) | 21,177 (U N 15,512) | 355,727 (U 249,235) | 13.9 (U 7.5) | + | Glaze | generic (strict), minify_json [P] | 3,780 (P 422) | 6,416 (P 1,144) | 23,765 (P 2,350) | 458,311 (P 96,405) | 14.7 (P 1.9) | + | serde_json (Rust) | Value | 4,012 | 6,583 | 17,306 | 509,702 | 16.5 | + | nlohmann/json `json` | parse + dump | 4,143 | 5,702 | 16,463 | 528,092 | 19.5 | + + **write** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | dump, dump (source numbers) [N] | 150 | 260 | 3,861 (N 998) | 63,958 | 0.8 | + | yyjson | write | 204 | 327 | 3,748 | 65,989 | 1.2 | + | sonic-cpp | Serialize | 256 | 541 | 5,120 | 69,546 | 1.6 | + | Glaze | generic, generic (strict) | 360 | 660 | 3,714 | 124,598 | 1.7 | + | nlohmann/json `json` | dump | 471 | 644 | 4,344 | 114,096 | 1.9 | + | simdjson | to_string | 359 | 637 | 4,999 | 154,364 | 1.9 | + | sonic-rs (Rust) | Value | 434 | 927 | 3,987 | 109,176 | 2.8 | + | simd-json (Rust) | borrowed | 582 | 800 | 5,147 | 122,623 | 2.8 | + | Boost.JSON | serialize | 480 | 1,016 | 6,154 | 139,022 | 2.5 | + | serde_json (Rust) | Value | 550 | 887 | 4,005 | 134,163 | 3.3 | + | RapidJSON | Writer | 717 | 1,033 | 9,017 | 134,260 | 4.0 | + +??? info "Times in µs on x86-64 with Clang 23" + + **validate** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | accept | 255 | 512 | 1,055 | 34,729 | 1.1 | + | yyjson | insitu (copy untimed), read (raw numbers) | 334 | 811 | 2,580 | 83,153 | 1.5 | + | sonic-rs (Rust) | IgnoredAny | 501 | 970 | 2,249 | 54,369 | 1.8 | + | Boost.JSON | SAX, SAX (numbers: none) | 571 | 910 | 1,684 | 55,498 | 2.3 | + | simdjson | DOM | 306 | 732 | 3,206 | 113,452 | 1.7 | + | sonic-cpp | Document [U] | – (U 448) | – (U 1,032) | – (U 3,143) | – (U 94,884) | – (U 1.8) | + | Glaze | validate_json | 588 | 1,431 | 1,867 | 75,571 | 2.4 | + | serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 624 (U 484) | 1,440 (U 1,370) | 2,406 (U 2,314) | 64,720 (U 58,247) | 2.4 (U 1.9) | + | nlohmann/json `json` | accept | 658 | 1,390 | 4,265 | 71,982 | 3.5 | + | simd-json (Rust) | tape (copy) | 567 | 1,430 | 4,359 | 207,551 | 2.9 | + | RapidJSON | SAX (default precision), SAX (default precision) (no encoding check) [U], SAX (string stream, default precision), SAX (string stream, default precision) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,756 (U 1,132) | 1,971 (U 1,572) | 4,118 | 198,915 (U 131,204) | 8.2 (U 4.1) | + + **sum** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse | 374 | 923 | 3,846 | 85,286 | 1.8 | + | yyjson | insitu (copy untimed) | 399 | 946 | 3,445 | 88,447 | 1.9 | + | simdjson | DOM, On-Demand | 394 | 977 | 4,117 | 114,602 | 2.2 | + | sonic-rs (Rust) | visitor | 501 | 1,123 | 4,397 | 59,583 | 2.5 | + | sonic-cpp | Document [U] | – (U 502) | – (U 1,175) | – (U 3,754) | – (U 104,583) | – (U 2.1) | + | Boost.JSON | SAX | 580 | 928 | 5,809 | 56,774 | 2.4 | + | nlohmann/json `json` | sax | 728 | 1,393 | 5,428 | 89,481 | 3.9 | + | simd-json (Rust) | visitor (copy) | 681 | 1,650 | 5,083 | 210,185 | 3.5 | + | serde_json (Rust) | visitor | 1,311 | 2,288 | 7,127 | 129,497 | 4.6 | + | RapidJSON | SAX, SAX (no encoding check) [U], SAX (string stream), SAX (string stream) (no encoding check) [U], insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,816 (U 1,187) | 2,224 (U 1,765) | 10,719 | 206,811 (U 135,945) | 8.5 (U 4.3) | + | Glaze | generic (double, strict), lazy_json [P] | 2,427 | 3,972 | 12,165 | 253,385 (P 196,582) | 9.2 (P 5.6) | + + **select** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse, structs (from_json) | 320 | 759 | 1,390 | 88,083 | 1.6 | + | yyjson | insitu (copy untimed), read (raw numbers) | 351 | 788 | 2,632 | 92,551 | 1.6 | + | simdjson | DOM, On-Demand (key selectors) [P], On-Demand [P], On-Demand structs [P] | 316 (P 181) | 731 (P 495) | 3,262 (P 702) | 120,808 (P 48,823) | 1.9 (P 1.1) | + | sonic-rs (Rust) | structs | 504 | 1,033 | 2,328 | 90,486 | 2.0 | + | Glaze | structs (validate_skipped), structs [P] | 544 (P 345) | 1,368 (P 419) | 1,924 (P 444) | 85,745 (P 66,442) | 2.2 (P 1.6) | + | sonic-cpp | Document [U] | – (U 460) | – (U 1,011) | – (U 3,204) | – (U 108,245) | – (U 1.9) | + | serde_json (Rust) | from_utf8 + structs, structs [U] | 701 | 1,532 | 2,529 (U 2,402) | 107,316 | 3.0 | + | Boost.JSON | parse, parse_into structs | 776 | 1,389 | 7,121 | 97,681 | 3.2 | + | simd-json (Rust) | structs (copy) | 679 | 1,731 | 5,144 | 239,164 | 3.5 | + | RapidJSON | insitu (copy untimed), insitu (copy untimed) (no encoding check) [U] | 1,762 (U 1,144) | 2,198 (U 1,817) | 11,464 | 209,290 (U 142,852) | 8.2 (U 4.1) | + | nlohmann/json `json` | parse, structs (from_json) | 3,602 | 5,124 | 11,831 | 444,210 | 20.2 | + + **edit** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | editable, editable (source numbers) [N] | 526 | 1,127 | 5,674 (N 2,443) | 196,370 | 2.9 | + | sonic-cpp | Document [U] | – (U 711) | – (U 1,472) | – (U 7,996) | – (U 183,852) | – (U 3.2) | + | yyjson | insitu (copy untimed) + mut copy, insitu (copy) + mut copy | 918 | 1,548 | 7,155 | 270,654 | 3.9 | + | sonic-rs (Rust) | Value | 1,197 | 2,389 | 7,744 | 390,952 | 6.9 | + | Boost.JSON | parse | 1,855 | 2,596 | 12,765 | 350,286 | 8.3 | + | simd-json (Rust) | borrowed (copy), owned (copy) | 1,862 | 4,194 | 14,896 | 391,369 | 9.0 | + | RapidJSON | insitu (copy untimed), insitu (copy untimed) (no encoding check) [U], insitu (copy) | 2,635 (U 1,952) | 3,103 (U 2,728) | 21,139 | 333,913 (U 267,081) | 11.8 (U 7.7) | + | nlohmann/json `json` | ordered_json, parse | 3,069 | 4,905 | 16,702 | 666,261 | 13.1 | + | serde_json (Rust) | Value | 4,042 | 6,586 | 16,631 | 632,766 | 17.6 | + | Glaze | generic (strict), generic [P] | 4,341 | 7,322 | 26,786 | 725,881 | 18.3 (P 17.7) | + + **minify** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | parse + dump, parse + dump (source numbers) [N] | 518 | 1,040 | 5,043 (N 2,456) | 146,125 | 2.4 | + | yyjson | insitu (copy untimed) + write, read (raw numbers) + write [N] | 620 | 1,189 | 6,283 (N 3,472) | 154,016 | 3.0 | + | sonic-cpp | Document + Serialize [U] | – (U 710) | – (U 1,485) | – (U 8,122) | – (U 166,935) | – (U 3.1) | + | simdjson | DOM + to_string, minify [P] | 783 (P 105) | 1,395 (P 269) | 8,303 (P 337) | 275,007 (P 45,087) | 4.0 (P 0.5) | + | sonic-rs (Rust) | Value | 1,000 | 2,097 | 7,795 | 215,280 | 5.4 | + | Boost.JSON | parse + serialize | 1,924 | 2,569 | 12,622 | 329,090 | 8.4 | + | simd-json (Rust) | borrowed (copy) | 1,889 | 4,196 | 15,716 | 414,377 | 9.2 | + | RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U], SAX to Writer (raw numbers) (no encoding check) [U N], SAX to Writer (raw numbers) [N], SAX to Writer (string stream), SAX to Writer (string stream) (no encoding check) [U] | 2,808 (U N 2,022) | 2,975 (U 2,480) | 22,589 (N 14,986) | 358,807 (U 261,527) | 12.7 (U 7.2) | + | serde_json (Rust) | Value | 4,012 | 6,583 | 17,306 | 509,702 | 16.5 | + | nlohmann/json `json` | parse + dump | 4,445 | 5,713 | 16,711 | 543,033 | 21.4 | + | Glaze | generic (strict), minify_json [P] | 4,132 (P 444) | 7,465 (P 1,059) | 26,962 (P 2,222) | 528,811 (P 91,153) | 17.2 (P 1.9) | + + **write** + + | library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) | + | --- | --- | --: | --: | --: | --: | --: | + | **nlohmann/json `json_document`** | dump, dump (source numbers) [N] | 160 (N 154) | 311 (N 279) | 3,714 (N 989) | 67,038 (N 64,301) | 0.9 | + | yyjson | write | 218 | 386 | 3,476 | 71,247 | 1.4 | + | sonic-cpp | Serialize | 224 | 475 | 4,850 | 65,131 | 1.3 | + | nlohmann/json `json` | dump | 451 | 628 | 4,506 | 116,529 | 2.0 | + | Glaze | generic | 399 | 748 | 4,220 | 128,020 | 2.0 | + | simdjson | to_string | 389 | 656 | 4,896 | 157,616 | 2.1 | + | sonic-rs (Rust) | Value | 434 | 927 | 3,987 | 109,176 | 2.8 | + | Boost.JSON | serialize | 478 | 916 | 5,615 | 141,846 | 2.5 | + | simd-json (Rust) | borrowed | 582 | 800 | 5,147 | 122,623 | 2.8 | + | serde_json (Rust) | Value | 550 | 887 | 4,005 | 134,163 | 3.3 | + | RapidJSON | Writer | 627 | 1,008 | 9,596 | 123,764 | 3.7 | + +### F. Behavior changes + +Visible changes that came with the speed: + +- **Float output** ([#5634][5634]). Żmij writes the shortest decimal that reads back as the same `double`, and the + closest one if there are several. Of one million random `double` bit patterns, 1,425 (0.14%) are now written + differently: 810 with fewer digits (`5.3165205877497296e+16` becomes `5.31652058774973e+16`), 615 with the same number + of digits but the closer ones. They all read back as the same `double`, and none of one million short decimals + changes. In `canada.json`, 69 of the 111,126 numbers come out differently. +- **Error positions** ([#5283][5283]). The column reported after a number at the end of a line is now correct; the fast + paths otherwise report the same byte, line, and column as the byte path, checked on 481,000 documents. +- **SAX float text** ([#5852][5852]). The built-in handlers behind `parse()` and `accept()` get an empty string as the + text of a float token. A user-written SAX handler still gets the token's text. +- **`FILE*` locking** ([#5828][5828]). The lock is taken once and held for the whole parse instead of once per byte. The + documentation mentions it, and an opt-out macro restores the old behavior. + +### G. How we measured + +**What is compared.** "3.12.0" is the released single header and "3.13.0" the released one. Both are compiled from the +*same* benchmark source, the Google Benchmark suite in +[`tests/benchmarks`](https://github.com/nlohmann/json/tree/develop/tests/benchmarks), with the BON8 benchmarks removed +because 3.12.0 has no BON8. + +| | | +| --- | --- | +| machine | Apple M1 Max laptop on AC power, macOS 27.0.1 | +| compiler | Apple clang 21, libc++ | +| flags | `-O3 -flto -DNDEBUG`, the compiler's default standard, C++14 | +| suite | 3 rounds × 4 repetitions per version, random interleaving, each round of a version started only when the load average was below 4 and repeated when it rose above 5 while running; of 3.12.0 and 3.13.0, the round that was 4.2% and 1.8% slower overall than the other two was dropped; the median of the remaining 8 | +| noise | the coefficient of variation was 3% or less for 172 of the 182 rows with 3.12.0 and 174 with 3.13.0; the largest was 7.3%, not counting one 3.12.0 run of a 1.5 µs benchmark that a disturbance made 1.4× as slow | +| inputs | the files of [Appendix A](#a-test-files), and number-heavy files | +| Intel check | the suite again on a MacBook Pro (15-inch, 2016) with an Intel Core i7-6920HQ (Skylake, 4 cores), macOS 12.0.1, Apple clang 13, the same flags with C++11; started below a load of 3, repeated above 4; the first round of each version dropped (3.12.0's was 4.7% slower than the others); the coefficient of variation was 3% or less for 120 rows with 3.12.0 and 161 of 234 with 3.13.0, so single rows are less reliable than on the M1 Max; geometric mean 3.07×, and two rows below 1×: copying `citm_catalog.json` without destroying the copy (0.93×) and `==` of it and a copy (0.95×), both in each round | + +

Setup of the Google Benchmark comparison of 3.12.0 and 3.13.0.

+ +**The other measurements.** The timeline is +[`tests/benchmarks/history`](https://github.com/nlohmann/json/tree/develop/tests/benchmarks/history): one program, +compiled against `single_include` of 3.12.0, of each of the 351 commits on `develop` up to November 3 that changed +`json.hpp` or `json_view.hpp` since, and of 3.13.0 (C++17, `-O3`, no LTO), 4 rounds in random order, median of the +rounds (the mean of the two middle ones). Two commits that don't compile on their own are left out. The commits up to +October 27 were run on October 27, the later ones and 3.13.0 on November 3, together with twelve of the earlier commits +as a check: per workload, their median moved by 1.5% or less. The algorithmic fixes come from small extra programs +(C++17, `-O3`, median of 3 interleaved runs). The comparison with other libraries is described in [Appendix +E](#e-comparison-with-other-libraries). + +**Compile times.** The two programs of [The price](#the-price), each compiled as one translation unit with `-std=c++20` +(modules need it) and `-O0` or `-O2`, with Apple clang 21 and Homebrew GCC 16.2 on the M1 Max. The time is the CPU time +(user plus system) of the compiler process, the median of 5 rounds in which all 40 compilations ran in a random order. +The slowest of the 5 runs was within 13% of the fastest for every program and every build of the precompiled header or +the module. Every variant was also linked and run once, with the same output from all of them. + +| build | program | 3.12.0 | 3.13.0 | 3.13.0, PCH | 3.13.0, module | +| --- | --- | --: | --: | --: | --: | +| Apple clang `-O0` | `count_numbers` | 955 | 1,320 | 689 | 918 | +| | `server_config` | 1,113 | 1,496 | 863 | 1,136 | +| Apple clang `-O2` | `count_numbers` | 1,393 | 2,081 | 1,458 | 1,685 | +| | `server_config` | 1,754 | 2,546 | 1,925 | 2,169 | +| GCC 16 `-O0` | `count_numbers` | 1,569 | 2,548 | 1,725 | 1,700 | +| | `server_config` | 2,025 | 2,985 | 2,302 | 2,326 | +| GCC 16 `-O2` | `count_numbers` | 2,336 | 3,702 | 2,987 | 2,913 | +| | `server_config` | 3,122 | 4,714 | 4,006 | 4,055 | + +

Compile time in milliseconds of the two programs in [The price](#the-price) (CPU +time of the compiler, median of 5 runs). Building the precompiled header took 973 and 987 ms with Apple clang (`-O0`, +`-O2`) and 2,565 and 2,589 ms with GCC; building the module took 1,617 and 1,602 ms or 2,499 and 2,465 ms.

+ +??? example "The programs and the build commands" + + ```cpp + // Reads a JSON file and adds up all of its numbers (the "sum" use case of the benchmark). + #include + #include + #include + #ifdef USE_MODULE + import nlohmann.json; + #else + #include + #endif + + using nlohmann::json; + + static double sum_numbers(const json& j) + { + switch (j.type()) + { + case json::value_t::array: + case json::value_t::object: + { + double sum = 0; + for (const auto& element : j) + { + sum += sum_numbers(element); + } + return sum; + } + case json::value_t::number_integer: + case json::value_t::number_unsigned: + case json::value_t::number_float: + return j.get(); + default: + return 0; + } + } + + int main(int argc, char* argv[]) + { + if (argc != 2) + { + return 1; + } + std::ifstream in(argv[1]); + const json j = json::parse(in); + std::cout << sum_numbers(j) << '\n'; + } + ``` + +

`count_numbers.cpp`.

+ + ```cpp + // Reads a configuration file into a struct, changes it, and writes it back indented. + #include + #include + #include + #include + #ifdef USE_MODULE + import nlohmann.json; + #else + #include + #endif + + using nlohmann::json; + + struct server_config + { + std::string host; + int port = 0; + double timeout = 0; + std::vector tags; + }; + + void to_json(json& j, const server_config& c) + { + j = json{{"host", c.host}, {"port", c.port}, {"timeout", c.timeout}, {"tags", c.tags}}; + } + + void from_json(const json& j, server_config& c) + { + j.at("host").get_to(c.host); + j.at("port").get_to(c.port); + j.at("timeout").get_to(c.timeout); + j.at("tags").get_to(c.tags); + } + + int main(int argc, char* argv[]) + { + if (argc != 3) + { + return 1; + } + std::ifstream in(argv[1]); + auto config = json::parse(in).get(); + config.port += 1; + config.tags.push_back("updated"); + std::ofstream(argv[2]) << json(config).dump(2) << '\n'; + } + ``` + +

`server_config.cpp`.

+ + ```sh + # Apple clang: the precompiled header (pch.hpp contains only #include ) ... + clang++ -std=c++20 -O2 -I single_include -x c++-header pch.hpp -o pch.hpp.pch + clang++ -std=c++20 -O2 -I single_include -include-pch pch.hpp.pch -c count_numbers.cpp + # ... and the module + clang++ -std=c++20 -O2 -fcxx-modules -I single_include -c -x c++-module src/modules/json.cppm \ + -fmodule-output=nlohmann.json.pcm -o json_mod.o + clang++ -std=c++20 -O2 -fcxx-modules -fmodule-file=nlohmann.json=nlohmann.json.pcm -DUSE_MODULE \ + -c count_numbers.cpp + + # GCC 16 (Homebrew on macOS, add --sysroot=$(xcrun --show-sdk-path)) + g++-16 -std=c++20 -O2 -I single_include -x c++-header pch.hpp -o pch.hpp.gch + g++-16 -std=c++20 -O2 -I single_include -include pch.hpp -Winvalid-pch -c count_numbers.cpp + g++-16 -std=c++20 -O2 -fmodules -I single_include -c src/modules/json.cppm -o json_mod.o + g++-16 -std=c++20 -O2 -fmodules -DUSE_MODULE -c count_numbers.cpp + ``` + +

The commands for one program at `-O2`; the module variants are linked with + `json_mod.o`.

+ +**What we did not measure.** The timeline and the algorithmic fixes ran on one Apple silicon laptop with Clang, the +suite also on an Intel laptop with Clang. The comparison with other libraries also ran on an x86-64 server with GCC +16.2, GCC 13, and Clang 23, and on the Mac with GCC 16.2 and Clang 23 as a check. That server is a virtual machine with +8 cores that present themselves as Haswell; its timings show the penalty of the microcode fix for Intel's JCC erratum, +which Haswell doesn't have, so the real CPU is probably a later one. It shares its cores with other work, so its +differences of a few percent are noise. The theme sections quote x86-64 numbers where a pull request measured them, +mostly with GCC 13 and Clang 18. Expect smaller gains for some workloads on x86-64 with glibc: its `FILE*` locking is +cheaper to begin with, and its allocator behaves differently. We did not measure on Windows, and we did not measure +binary size or memory use. + +### H. Pull requests by theme + +- 1 **Specialize for each input source:** contiguous input + [#5283][5283]; streams and `FILE*` [#5828][5828], [#5884][5884]; binary strings in bulk [#5233][5233]; sized sentinels + [#5268][5268]. +- 2 **Work on words, not bytes:** word-at-a-time strings, UTF-8 + runs, and digits [#5283][5283], [#5738][5738], [#5851][5851]; indentation [#5810][5810]; `dump()` runs [#5285][5285]; + SSE2 and NEON [#5853][5853], [#5628][5628]; `json_document` with `ensure_ascii` [#5879][5879]; short strings + [#5878][5878], [#5883][5883]; escape table [#5822][5822]; loop shape [#5490][5490]; fraction digits [#5971][5971]; + BSON keys [#5968][5968]; UTF-8 checks of binary strings [#5982][5982]; one SIMD macro set [#5921][5921]. +- 3 **Own the number conversions:** Eisel-Lemire [#5617][5617]; + long numbers [#5738][5738]; one pass over the digits [#5851][5851]; Żmij [#5634][5634]; long integers in `dump()` + [#5964][5964]; MSVC intrinsics for the 128-bit multiplication [#5782][5782]. +- 4 **Don't do unnecessary work:** float token text + [#5852][5852]; token buffer [#5234][5234], [#5828][5828]; positions on error [#5809][5809]; binary readers' copy + [#5501][5501]; `ordered_json` growth [#5609][5609]; arrays at their final size [#5882][5882]; moving keys + [#5458][5458], [#5855][5855]; separator check [#5592][5592]; CBOR keys [#5328][5328]; `accept()` without copies + [#5978][5978]; runs of scalars in binary arrays [#5975][5975], [#5980][5980], [#5981][5981], [#6008][6008]; BJData + marker list [#5555][5555]; `from_json()` into containers [#5833][5833]. +- 5 **Read the assembly:** stack canary [#5854][5854]; + exceptions and inlining [#5838][5838], [#5840][5840], [#5839][5839], [#5836][5836]; aliasing [#5633][5633]; forced + inlining [#5878][5878]; branch-free selections [#5908][5908]; code size [#5902][5902]. +- 6 **Write through a cursor:** write buffer [#5285][5285]; + adapter on the stack [#5449][5449]; binary sinks [#5286][5286]; cursor and runs of numbers [#5824][5824], + [#5885][5885]; `to_bson()` in one pass [#5979][5979]. +- 7 **Fix the algorithm first:** `diff()` [#5461][5461]; parse + callbacks [#5457][5457]; `operator<` [#5390][5390]; `flatten()` [#5834][5834]; `unflatten()` [#5793][5793]; JSON + Pointer and Patch [#5861][5861], [#5886][5886]; `to_bson()` [#5553][5553]; `JSON_DIAGNOSTICS` [#5832][5832]; bounded + recursion [#5285][5285], [#5389][5389], [#5547][5547]; destructor [#5762][5762], [#5835][5835]. +- 8 **Build a different data structure:** `json_document` + [#5620][5620], [#5627][5627], [#5628][5628], [#5622][5622], [#5908][5908], [#5879][5879]; `accept()` without an index + [#5970][5970]; reading and indexing [#5888][5888], [#5915][5915], [#5889][5889], [#5890][5890]; editing [#5630][5630], + [#5919][5919], [#5926][5926]. +- **Validation:** guard pages [#5826][5826]; differential fuzzing [#5827][5827]; float checks [#5617][5617], + [#5908][5908]; mutation checks [#5878][5878]. +- **The UTF-8 check that came and went:** [#5185][5185], [#5531][5531], [#5741][5741], [#5746][5746]. + +### I. Details of the themes + +**Eisel-Lemire (theme 3).** +[fast_float](https://github.com/fastfloat/fast_float)'s `compute_float`, which 3.13.0 adapts, works with integers only. +The value is `w · 10^q = w · 5^q · 2^q`, so it normalizes `w` to 64 significant bits, multiplies it with a 128-bit +approximation of `5^q` from a table of 651 entries, and takes the 53 bits of the mantissa plus one rounding bit from the +top of the product. The binary exponent comes from a fixed-point `log2(10)`. If the nine bits below the rounding bit are +all ones, the truncated part of the table entry could still carry into the result; then a second multiplication with the +next 64 bits of `5^q` decides, which happens for about one input in 512. Mushtak and Lemire showed in 2023 that for up +to 19 digits these 128 bits always suffice, so the algorithm needs no fallback. Exact ties between two `double`s, the +only place where rounding half to even matters, can only occur for small exponents, and are handled there. (Clinger's +fast path, by contrast, uses the floating-point unit and assumes the default rounding mode.) + +Numbers with more than 19 digits are rare in JSON. For them, Eisel-Lemire runs on the first 19 digits, `w`, and on +`w + 1`: the true value lies between the two, so if both give the same `double`, that is the answer. Only if they differ +does fast_float's digit comparison build the exact midpoint between the two candidates as a big integer and compare all +digits with it. + +**Żmij's digits (theme 3).** Żmij's digit conversion, by Xiang +JunBo, is the same divide-by-multiplying idea as the parser's, run backwards on all lanes of a word at once: + +```cpp +// 12345678 -> the bytes 1, 2, 3, 4, 5, 6, 7, 8 (one digit per byte) +std::uint64_t eight_digit_bytes(std::uint64_t abcdefgh) noexcept +{ + // x / d as (x * (2^k / d + 1)) >> k + const std::uint64_t abcd = (abcdefgh * (((1ull << 40) / 10000) + 1)) >> 40; + const std::uint64_t abcd_efgh = abcdefgh + ((1ull << 32) - 10000) * abcd; + const std::uint64_t ab_ef = ((abcd_efgh * (((1ull << 19) / 100) + 1)) >> 19) & 0x7F0000007Full; + const std::uint64_t ab_cd_ef_gh = abcd_efgh + ((1ull << 16) - 100) * ab_ef; + const std::uint64_t a_c_e_g = + ((ab_cd_ef_gh * (((1ull << 10) / 10) + 1)) >> 10) & 0x000F000F000F000Full; + return ab_cd_ef_gh + ((1ull << 8) - 10) * a_c_e_g; +} +``` + +

Żmij's conversion of an eight-digit number to one digit per byte, in three steps of +divide-by-multiplying.

+ +`(x · ⌈2^k / d⌉) >> k` is `x / d` for the range that occurs, and `x + (2^w − d) · (x / d)` rewrites `x` as +`(x / d) · 2^w + x mod d`: the quotient moves up into the next lane. Three steps split 8 digits into 4 + 4, 2 + 2 + 2 + +2, and single digits. A zero digit becomes a zero byte, so leading and trailing zeros are counted with a count of +leading or trailing zero bits instead of divisions. + +**The destructor's walk (theme 7).** While the destructor's walk +empties a container, the slot of that container's last child holds the link back to the container's parent: + +```cpp +// descend into the last child of cur, reversing the link +basic_json& slot = last_child(cur); +take(tmp, slot); // the child's contents +take(slot, prev); // its slot now remembers cur's parent +take(prev, cur); // cur becomes the parent +take(cur, tmp); // the child becomes cur +// on the way up: read the parent back out of prev's last slot, pop that slot, free cur +``` + +

One step down in the destructor's walk: the emptied slot remembers the way back.

+ +`take()` moves the 16 bytes of type and value and leaves a null behind. The way back needs no memory: the slot that +holds the link is the one being emptied, it stays the last child until the walk comes back up, and only then, after the +link is taken out, is it removed. A child is removed only when it is a scalar or an empty container, so each removal +destroys one level at most. + +### J. Validation + +A faster path is only useful if it gives the same result as the slow one, including the same error at the same byte. +These are the checks behind the themes: + +- **Error positions** (theme 1). The contiguous fast paths defer + to the byte path on anything malformed. On 481,000 documents, 298,333 of them with errors, the contiguous and the byte + path reported the same exception, message, byte, line and column, except for the one deliberate correction listed in + [Appendix F](#f-behavior-changes). +- **Stream windows** (theme 1). A test `streambuf` hands out get + areas of 1–4,096 bytes, so that every token crosses a window edge at every offset, and the result is compared with a + `streambuf` without a get area, which takes the old path. +- **Differential fuzzing of the input kinds.** Every fuzz input is also parsed from an `std::istringstream`, from + `std::list` iterators (the byte path) and from a `FILE*`, and the value, the exception id, the message, and the byte + offset must be identical ([#5827][5827]). +- **Guard pages.** The input is copied so that its last byte is the last readable byte of a page, and the next page is + unmapped. AddressSanitizer misses an over-read into the slack of the same heap allocation, and fuzzers rarely end an + input exactly at a page boundary; this test crashes on any over-read by one byte ([#5826][5826]). +- **Number conversion** (theme 3). 6.5 million float tokens were + compared with `strtod`, among them 60,000 exact halfway cases, and 900,000 hard cases from other test suites: all + bit-identical. `json_document`'s batched float output is byte-identical to the general writer for 10⁹ generated + tokens. +- **Unchanged output.** For this post, we checked that 3.13.0 writes the same bytes as 3.12.0 in all five binary formats + for 39 test files, and the same JSON text for `twitter.json` and `citm_catalog.json`. The changes of float output are + listed in [Appendix F](#f-behavior-changes). +- **`json_document` against `json`.** A fuzzer parses every input with both and requires the same verdict, the same + value and the same error message, from a borrowed string and from an exact-size buffer without a closing NUL + ([`fuzzer-parse_json_view.cpp`](https://github.com/nlohmann/json/blob/develop/tests/src/fuzzer-parse_json_view.cpp)). +- **Comparison** (theme 7). The single-pass `operator<` was + compared with the old code on 68,121 pairs of values. +- **Mutation checks.** Break a fast path on purpose (skip one byte too many, mark `"` as copyable) and make sure the + tests notice. Marking the quote as copyable in the short-string table fails 4,551 assertions. +- **The comparison with other libraries.** Before anything is timed, every way's result is checked: the same values, the + same string bytes, the same sum of all numbers (to the last bit where they are added in the same order), and an output + that reads back as the expected document. The expected values come from nlohmann/json; the Rust programs compute their + own with serde_json, and the two agree ([Appendix E](#e-comparison-with-other-libraries)). + +[5185]: https://github.com/nlohmann/json/pull/5185 +[5233]: https://github.com/nlohmann/json/pull/5233 +[5234]: https://github.com/nlohmann/json/pull/5234 +[5268]: https://github.com/nlohmann/json/pull/5268 +[5283]: https://github.com/nlohmann/json/pull/5283 +[5285]: https://github.com/nlohmann/json/pull/5285 +[5286]: https://github.com/nlohmann/json/pull/5286 +[5328]: https://github.com/nlohmann/json/pull/5328 +[5389]: https://github.com/nlohmann/json/pull/5389 +[5390]: https://github.com/nlohmann/json/pull/5390 +[5449]: https://github.com/nlohmann/json/pull/5449 +[5457]: https://github.com/nlohmann/json/pull/5457 +[5458]: https://github.com/nlohmann/json/pull/5458 +[5461]: https://github.com/nlohmann/json/pull/5461 +[5490]: https://github.com/nlohmann/json/pull/5490 +[5501]: https://github.com/nlohmann/json/pull/5501 +[5531]: https://github.com/nlohmann/json/pull/5531 +[5547]: https://github.com/nlohmann/json/pull/5547 +[5553]: https://github.com/nlohmann/json/pull/5553 +[5555]: https://github.com/nlohmann/json/pull/5555 +[5592]: https://github.com/nlohmann/json/pull/5592 +[5609]: https://github.com/nlohmann/json/pull/5609 +[5617]: https://github.com/nlohmann/json/pull/5617 +[5620]: https://github.com/nlohmann/json/pull/5620 +[5622]: https://github.com/nlohmann/json/pull/5622 +[5627]: https://github.com/nlohmann/json/pull/5627 +[5628]: https://github.com/nlohmann/json/pull/5628 +[5630]: https://github.com/nlohmann/json/pull/5630 +[5633]: https://github.com/nlohmann/json/pull/5633 +[5634]: https://github.com/nlohmann/json/pull/5634 +[5660]: https://github.com/nlohmann/json/issues/5660 +[5738]: https://github.com/nlohmann/json/pull/5738 +[5741]: https://github.com/nlohmann/json/pull/5741 +[5746]: https://github.com/nlohmann/json/pull/5746 +[5762]: https://github.com/nlohmann/json/pull/5762 +[5782]: https://github.com/nlohmann/json/pull/5782 +[5793]: https://github.com/nlohmann/json/pull/5793 +[5809]: https://github.com/nlohmann/json/pull/5809 +[5810]: https://github.com/nlohmann/json/pull/5810 +[5822]: https://github.com/nlohmann/json/pull/5822 +[5824]: https://github.com/nlohmann/json/pull/5824 +[5826]: https://github.com/nlohmann/json/pull/5826 +[5827]: https://github.com/nlohmann/json/pull/5827 +[5828]: https://github.com/nlohmann/json/pull/5828 +[5832]: https://github.com/nlohmann/json/pull/5832 +[5833]: https://github.com/nlohmann/json/pull/5833 +[5834]: https://github.com/nlohmann/json/pull/5834 +[5835]: https://github.com/nlohmann/json/pull/5835 +[5836]: https://github.com/nlohmann/json/pull/5836 +[5838]: https://github.com/nlohmann/json/pull/5838 +[5839]: https://github.com/nlohmann/json/pull/5839 +[5840]: https://github.com/nlohmann/json/pull/5840 +[5851]: https://github.com/nlohmann/json/pull/5851 +[5852]: https://github.com/nlohmann/json/pull/5852 +[5853]: https://github.com/nlohmann/json/pull/5853 +[5854]: https://github.com/nlohmann/json/pull/5854 +[5855]: https://github.com/nlohmann/json/pull/5855 +[5861]: https://github.com/nlohmann/json/pull/5861 +[5878]: https://github.com/nlohmann/json/pull/5878 +[5879]: https://github.com/nlohmann/json/pull/5879 +[5882]: https://github.com/nlohmann/json/pull/5882 +[5883]: https://github.com/nlohmann/json/pull/5883 +[5884]: https://github.com/nlohmann/json/pull/5884 +[5885]: https://github.com/nlohmann/json/pull/5885 +[5886]: https://github.com/nlohmann/json/pull/5886 +[5888]: https://github.com/nlohmann/json/pull/5888 +[5889]: https://github.com/nlohmann/json/pull/5889 +[5890]: https://github.com/nlohmann/json/pull/5890 +[5902]: https://github.com/nlohmann/json/pull/5902 +[5908]: https://github.com/nlohmann/json/pull/5908 +[5915]: https://github.com/nlohmann/json/pull/5915 +[5919]: https://github.com/nlohmann/json/pull/5919 +[5921]: https://github.com/nlohmann/json/pull/5921 +[5926]: https://github.com/nlohmann/json/pull/5926 +[5964]: https://github.com/nlohmann/json/pull/5964 +[5968]: https://github.com/nlohmann/json/pull/5968 +[5970]: https://github.com/nlohmann/json/pull/5970 +[5971]: https://github.com/nlohmann/json/pull/5971 +[5975]: https://github.com/nlohmann/json/pull/5975 +[5978]: https://github.com/nlohmann/json/pull/5978 +[5979]: https://github.com/nlohmann/json/pull/5979 +[5980]: https://github.com/nlohmann/json/pull/5980 +[5981]: https://github.com/nlohmann/json/pull/5981 +[5982]: https://github.com/nlohmann/json/pull/5982 +[6008]: https://github.com/nlohmann/json/pull/6008 diff --git a/docs/mkdocs/docs/images/json_view_layout.svg b/docs/mkdocs/docs/images/json_view_layout.svg index 72277c1f1..275220080 100644 --- a/docs/mkdocs/docs/images/json_view_layout.svg +++ b/docs/mkdocs/docs/images/json_view_layout.svg @@ -17,16 +17,16 @@ std::map - + "port" 6379 - + "price" 19.9 double: 19.90 is gone - + "tags" • @@ -38,8 +38,8 @@ json json - - + + std::string eu diff --git a/docs/mkdocs/docs/images/json_view_layout_index.svg b/docs/mkdocs/docs/images/json_view_layout_index.svg new file mode 100644 index 000000000..9f5249b8c --- /dev/null +++ b/docs/mkdocs/docs/images/json_view_layout_index.svg @@ -0,0 +1,148 @@ + +The same J​SON text parsed by json_document::parse() +The same text parsed by json_document::parse(): it keeps the 54 bytes of source text and builds a flat index of nine 16-byte nodes in document order: object, key port, unsigned integer 6379 (the converted value is in the node), key price, float, key tags, array, string eu, and an escaped string. Keys, the float, and the plain string point back into the source text; the escaped string points into the document's buffer of decoded strings. A json_view is two pointers: one to the document and one to a node, here the array. + + + + + + + + + + + +json_document::parse(): the source text stays where it is; one flat index of 16-byte nodes +source text, 54 bytes (borrowed, or owned by the document) + + + + + + + + +{ +" +p +o +r +t +" +: +6 +3 +7 +9 +, +" +p +r +i +c +e +" +: +1 +9 +. +9 +0 +, +" +t +a +g +s +" +: +[ +" +e +u +" +, +" +a +\ +" +b +" +] +} +0 +10 +20 +30 +40 +50 + +json_document: owns the node index and the buffer of decoded strings +node index: 9 nodes × 16 bytes = 144 bytes, in document order + +0 +object +len 3 +next 9 + +1 +key +off 2 +len 4 + + +2 +uint +6379 +(converted) + +3 +key +off 16 +len 5 + + +4 +float +off 24 +len 5 + + +5 +key +off 32 +len 4 + + +6 +array +len 2 +next 3 + +7 +string +off 41 +len 2 + + +8 +string +escaped +len 3 +decoded strings + +a +" +b + +json_view v = doc.root()["tags"] + + +doc* +node* + + +integers are converted while parsing and kept in their node; +floats and strings point back into the text + + diff --git a/docs/mkdocs/docs/images/json_view_layout_tree.svg b/docs/mkdocs/docs/images/json_view_layout_tree.svg new file mode 100644 index 000000000..47aaa04f9 --- /dev/null +++ b/docs/mkdocs/docs/images/json_view_layout_tree.svg @@ -0,0 +1,49 @@ + +A J​SON text parsed by basic_json::parse() +The text {"port": 6379, "price": 19.90, "tags": ["eu", "a\"b"]} parsed by basic_json::parse(): the root json value points to a std::map whose three nodes are separate heap allocations; the price is stored as the double 19.9; the tags array is a std::vector of two json values, each pointing to its own std::string. + + + + + + + + + + +basic_json::parse(): a tree, every array, object, and string in its own heap allocation + +json + + +std::map + + +"port" +6379 + + +"price" +19.9 +double: 19.90 is gone + + +"tags" +• + + +std::vector + + + +json +json + + + +std::string eu + +std::string a"b + +a separate heap allocation + diff --git a/docs/mkdocs/docs/images/perf_blog_cliffs.svg b/docs/mkdocs/docs/images/perf_blog_cliffs.svg new file mode 100644 index 000000000..422b818fa --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_cliffs.svg @@ -0,0 +1,69 @@ + +Operations that grew quadratically or worse: time with 3.12.0 and 3.13.0, log scale +Dot plot on a logarithmic time axis, less is better; an arrow leads from each 3.12.0 time to the 3.13.0 time. diff() 64k numbers vs []: 4237 ms to 10.8 ms; diff() 20k objects vs half: 122 ms to 4.13 ms; parse() callback, 32k objects: 1398 ms to 12.1 ms; operator< nested 24 deep: 64.4 ms to 0.002 ms; operator< citm, 10x: 284 ms to 3.94 ms; flatten() citm, ordered_json: 271 ms to 1.45 ms; to_bson() 200 deep, 100x: 20.3 ms to 0.352 ms; push_back() 100k, diagnostics: 1589 ms to 5.32 ms; at(i) 10k, diagnostics: 45.9 ms to 0.088 ms. + +1 µs + +10 µs + +0.1 ms + +1 ms + +10 ms + +0.1 s + +1 s + +10 s +runtime (log scale), less is better + +3.12.0 +3.13.0 +diff() 64k numbers vs [] + +diff() 64k numbers vs [], 3.12.0: 4237 ms +diff() 64k numbers vs [], 3.13.0: 10.8 ms +392× +diff() 20k objects vs half + +diff() 20k objects vs half, 3.12.0: 122 ms +diff() 20k objects vs half, 3.13.0: 4.13 ms +30× +parse() callback, 32k objects + +parse() callback, 32k objects, 3.12.0: 1398 ms +parse() callback, 32k objects, 3.13.0: 12.1 ms +116× +operator< nested 24 deep + +operator< nested 24 deep, 3.12.0: 64.4 ms +operator< nested 24 deep, 3.13.0: 0.002 ms +32200× +operator< citm, 10x + +operator< citm, 10x, 3.12.0: 284 ms +operator< citm, 10x, 3.13.0: 3.94 ms +72× +flatten() citm, ordered_json + +flatten() citm, ordered_json, 3.12.0: 271 ms +flatten() citm, ordered_json, 3.13.0: 1.45 ms +187× +to_bson() 200 deep, 100x + +to_bson() 200 deep, 100x, 3.12.0: 20.3 ms +to_bson() 200 deep, 100x, 3.13.0: 0.352 ms +58× +push_back() 100k, diagnostics + +push_back() 100k, diagnostics, 3.12.0: 1589 ms +push_back() 100k, diagnostics, 3.13.0: 5.32 ms +299× +at(i) 10k, diagnostics + +at(i) 10k, diagnostics, 3.12.0: 45.9 ms +at(i) 10k, diagnostics, 3.13.0: 0.088 ms +522× + diff --git a/docs/mkdocs/docs/images/perf_blog_digits.svg b/docs/mkdocs/docs/images/perf_blog_digits.svg new file mode 100644 index 000000000..3321875da --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_digits.svg @@ -0,0 +1,66 @@ + +Converting eight A​SCII digits to their value with three multiplications +The text 12345678 as one word. Masking gives the digit values 1 to 8, one per byte. Multiplying by 10 times 2 to the 8 plus 1 and shifting gives 12, 34, 56 and 78 in 16-bit lanes; multiplying by 100 times 2 to the 16 plus 1 gives 1234 and 5678 in 32-bit lanes; multiplying by 10000 times 2 to the 32 plus 1 gives 12345678. +eight A​SCII digits in one 64-bit word (byte 0 is the lowest) + +1 +0x31 + +2 +0x32 + +3 +0x33 + +4 +0x34 + +5 +0x35 + +6 +0x36 + +7 +0x37 + +8 +0x38 +& 0x0F0F0F0F0F0F0F0F: one digit value per byte + +1 + +2 + +3 + +4 + +5 + +6 + +7 + +8 +× (10 · 2⁸ + 1) >> 8, every second byte kept: two digits per 16 bits + +12 + +34 + +56 + +78 +× (100 · 2¹⁶ + 1) >> 16, every second lane kept: four digits per 32 bits + +1234 + +5678 +× (10000 · 2³² + 1) >> 32: the value + + +12345678 +Each step combines neighboring lanes, in all lanes of the word at once: +three multiplications instead of eight, and no branch. + diff --git a/docs/mkdocs/docs/images/perf_blog_distribution.svg b/docs/mkdocs/docs/images/perf_blog_distribution.svg new file mode 100644 index 000000000..4760bfd85 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_distribution.svg @@ -0,0 +1,36 @@ + +Speedup of 3.13.0 over 3.12.0 for all 182 benchmarks of the suite +Bars counting the benchmarks per speedup range: below 1x: 1; 1 to 1.5x: 22; 1.5 to 2x: 12; 2 to 3x: 60; 3 to 5x: 58; 5 to 10x: 25; 10x or more: 4. Median 2.9x, geometric mean 3.0x. + +0 + +20 + +40 + +60 +below 1×: 1 +1 +below 1× +1 to 1.5×: 22 +22 +1 to 1.5× +1.5 to 2×: 12 +12 +1.5 to 2× +2 to 3×: 60 +60 +2 to 3× +3 to 5×: 58 +58 +3 to 5× +5 to 10×: 25 +25 +5 to 10× +10× or more: 4 +4 +10× or more + +speedup over 3.12.0, more is better +number of benchmarks + diff --git a/docs/mkdocs/docs/images/perf_blog_heldout.svg b/docs/mkdocs/docs/images/perf_blog_heldout.svg new file mode 100644 index 000000000..5bce0d107 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_heldout.svg @@ -0,0 +1,102 @@ + +Validating 19 files 3.13.0 was not tuned on: json_document's time relative to the fastest other library per file +Dot plot per file, less is better; below 1.0 json_document is the fastest fully validating library. mesh: Mac 0.68, x86-64 0.44 (serde_json (Rust)); marine_ik: Mac 0.59, x86-64 0.64 (Boost.J​SON); semanticscholar-corpus: Mac 0.79, x86-64 0.65 (sonic-rs (Rust)); gsoc-2018: Mac 0.60, x86-64 0.66 (Boost.J​SON); twitter_api_compact_response: Mac 0.91, x86-64 0.70 (simdjson); twitterescaped: Mac 0.93, x86-64 0.76 (simdjson); numbers: Mac 0.67, x86-64 0.77 (Boost.J​SON); github_events: Mac 0.79, x86-64 0.77 (simdjson); update-center: Mac 0.88, x86-64 0.79 (simdjson); twitter_timeline: Mac 0.97, x86-64 0.80 (yyjson); twitter_api_response: Mac 0.93, x86-64 0.81 (simdjson); google_maps_api_compact_response: Mac 0.86, x86-64 0.81 (yyjson); repeat: Mac 0.65, x86-64 0.82 (simdjson); random: Mac 0.81, x86-64 0.88 (simdjson); apache_builds: Mac 1.08, x86-64 0.90 (simdjson); instruments: Mac 0.90, x86-64 0.92 (simdjson); mesh.pretty: Mac 0.86, x86-64 0.92 (Boost.J​SON); tree-pretty: Mac 0.93, x86-64 0.96 (simdjson); google_maps_api_response: Mac 0.93, x86-64 0.99 (simdjson). + +0.4× + +0.5× + +0.6× + +0.7× + +0.8× + +0.9× + +1.0× + +1.1× +json_document’s time / the fastest other library’s, less is better +Apple M1 Max +x86-64, G​CC 16.2 +next on x86-64 +mesh +mesh, Apple M1 Max: 0.68× the time of Glaze +mesh, x86-64, G​CC 16.2: 0.44× the time of serde_json (Rust) +serde_json (Rust) +marine_ik +marine_ik, Apple M1 Max: 0.59× the time of Glaze +marine_ik, x86-64, G​CC 16.2: 0.64× the time of Boost.J​SON +Boost.J​SON +semanticscholar-corpus +semanticscholar-corpus, Apple M1 Max: 0.79× the time of sonic-rs (Rust) +semanticscholar-corpus, x86-64, G​CC 16.2: 0.65× the time of sonic-rs (Rust) +sonic-rs (Rust) +gsoc-2018 +gsoc-2018, Apple M1 Max: 0.60× the time of sonic-rs (Rust) +gsoc-2018, x86-64, G​CC 16.2: 0.66× the time of Boost.J​SON +Boost.J​SON +twitter_api_compact_response +twitter_api_compact_response, Apple M1 Max: 0.91× the time of yyjson +twitter_api_compact_response, x86-64, G​CC 16.2: 0.70× the time of simdjson +simdjson +twitterescaped +twitterescaped, Apple M1 Max: 0.93× the time of yyjson +twitterescaped, x86-64, G​CC 16.2: 0.76× the time of simdjson +simdjson +numbers +numbers, Apple M1 Max: 0.67× the time of Boost.J​SON +numbers, x86-64, G​CC 16.2: 0.77× the time of Boost.J​SON +Boost.J​SON +github_events +github_events, Apple M1 Max: 0.79× the time of simdjson +github_events, x86-64, G​CC 16.2: 0.77× the time of simdjson +simdjson +update-center +update-center, Apple M1 Max: 0.88× the time of sonic-rs (Rust) +update-center, x86-64, G​CC 16.2: 0.79× the time of simdjson +simdjson +twitter_timeline +twitter_timeline, Apple M1 Max: 0.97× the time of yyjson +twitter_timeline, x86-64, G​CC 16.2: 0.80× the time of yyjson +yyjson +twitter_api_response +twitter_api_response, Apple M1 Max: 0.93× the time of simdjson +twitter_api_response, x86-64, G​CC 16.2: 0.81× the time of simdjson +simdjson +google_maps_api_compact_response +google_maps_api_compact_response, Apple M1 Max: 0.86× the time of yyjson +google_maps_api_compact_response, x86-64, G​CC 16.2: 0.81× the time of yyjson +yyjson +repeat +repeat, Apple M1 Max: 0.65× the time of simdjson +repeat, x86-64, G​CC 16.2: 0.82× the time of simdjson +simdjson +random +random, Apple M1 Max: 0.81× the time of simdjson +random, x86-64, G​CC 16.2: 0.88× the time of simdjson +simdjson +apache_builds +apache_builds, Apple M1 Max: 1.08× the time of simdjson +apache_builds, x86-64, G​CC 16.2: 0.90× the time of simdjson +simdjson +instruments +instruments, Apple M1 Max: 0.90× the time of yyjson +instruments, x86-64, G​CC 16.2: 0.92× the time of simdjson +simdjson +mesh.pretty +mesh.pretty, Apple M1 Max: 0.86× the time of Glaze +mesh.pretty, x86-64, G​CC 16.2: 0.92× the time of Boost.J​SON +Boost.J​SON +tree-pretty +tree-pretty, Apple M1 Max: 0.93× the time of simdjson +tree-pretty, x86-64, G​CC 16.2: 0.96× the time of simdjson +simdjson +google_maps_api_response +google_maps_api_response, Apple M1 Max: 0.93× the time of simdjson +google_maps_api_response, x86-64, G​CC 16.2: 0.99× the time of simdjson +simdjson + +as fast as the next + diff --git a/docs/mkdocs/docs/images/perf_blog_overlap.svg b/docs/mkdocs/docs/images/perf_blog_overlap.svg new file mode 100644 index 000000000..390603f69 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_overlap.svg @@ -0,0 +1,72 @@ + +Writing an 18-byte string with two overlapping 16-byte loads and stores +The 18 bytes of profile_link_color. Load a covers bytes 0 to 15, load b covers bytes 2 to 17, so bytes 2 to 15 are in both. Neither contains a byte that needs escaping, so a is stored at the destination and b 2 bytes later; the second store writes bytes 2 to 15 again with the same values. This works for any length from 16 to 32 bytes without a loop. +a string of n = 18 bytes: too long for one 16-byte vector, too short for a loop + +p + +r + + +o + + +f + + +i + + +l + + +e + + +_ + + +l + + +i + + +n + + +k + + +_ + + +c + + +o + + +l + +o + +r +0 +2 +15 +17 + + + +a = load 16 bytes at p + + + +b = load 16 bytes at p + n − 16 +Both loads lie inside the string, and together they cover all of it; bytes 2 to 15 are in both. +Test a and b for a quote, a backslash, a control character or 0x7F: none, so write +store a at d, store b at d + n − 16 +The second store writes bytes 2 to 15 again, with the same values. For any n from 16 to 32: +two loads, one test, two stores, no loop and no branch on the length. + diff --git a/docs/mkdocs/docs/images/perf_blog_overview.svg b/docs/mkdocs/docs/images/perf_blog_overview.svg new file mode 100644 index 000000000..a53442e70 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_overview.svg @@ -0,0 +1,87 @@ + +Speedup of 3.13.0 over 3.12.0 per workload, Apple M1 Max, Apple clang +Horizontal bars of the speedup, more is better. twitter.json 3.1x; citm_catalog.json 4.2x; canada.json 3.4x; canada.json, indented 6.5x; citm, ordered_json 6.8x; twitter, std::ifstream 2.5x; citm, FILE* 4.7x; citm, accept() 7.1x; dump() twitter 6.7x; dump() canada 3.0x; dump(4) citm 4.7x; to_cbor() twitter 4.6x; twitter, memory 3.4x; twitter, FILE* 6.6x; diff() canada 10x; iterate canada 2.7x; copy + destroy citm 1.13x; == citm 1.06x. +Parsing +Writing +Reading C​BOR +Values + +1× + +2× + +3× + +4× + +5× + +6× + +7× + +8× + +9× + +10× + +11× +twitter.json +twitter.json: 3.1× +3.1× +citm_catalog.json +citm_catalog.json: 4.2× +4.2× +canada.json +canada.json: 3.4× +3.4× +canada.json, indented +canada.json, indented: 6.5× +6.5× +citm, ordered_json +citm, ordered_json: 6.8× +6.8× +twitter, std::ifstream +twitter, std::ifstream: 2.5× +2.5× +citm, FILE* +citm, FILE*: 4.7× +4.7× +citm, accept() +citm, accept(): 7.1× +7.1× +dump() twitter +dump() twitter: 6.7× +6.7× +dump() canada +dump() canada: 3.0× +3.0× +dump(4) citm +dump(4) citm: 4.7× +4.7× +to_cbor() twitter +to_cbor() twitter: 4.6× +4.6× +twitter, memory +twitter, memory: 3.4× +3.4× +twitter, FILE* +twitter, FILE*: 6.6× +6.6× +diff() canada +diff() canada: 10× +10× +iterate canada +iterate canada: 2.7× +2.7× +copy + destroy citm +copy + destroy citm: 1.13× +1.13× +== citm +== citm: 1.06× +1.06× + + +speedup over 3.12.0 (3.12.0 = 1×), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_price.svg b/docs/mkdocs/docs/images/perf_blog_price.svg new file mode 100644 index 000000000..575485d56 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_price.svg @@ -0,0 +1,99 @@ + +Compile time of two programs with 3.13.0, alone, with a precompiled header and as a module, compared with 3.12.0 +Horizontal bars of the change in compile time against 3.12.0, less is better. Apple clang 21, -O0 (debug), count_numbers, 3.13.0: +38%; Apple clang 21, -O0 (debug), count_numbers, 3.13.0, precompiled header: -28%; Apple clang 21, -O0 (debug), count_numbers, 3.13.0, module: -4%; Apple clang 21, -O0 (debug), server_config, 3.13.0: +34%; Apple clang 21, -O0 (debug), server_config, 3.13.0, precompiled header: -23%; Apple clang 21, -O0 (debug), server_config, 3.13.0, module: +2%; Apple clang 21, -O2, count_numbers, 3.13.0: +49%; Apple clang 21, -O2, count_numbers, 3.13.0, precompiled header: +5%; Apple clang 21, -O2, count_numbers, 3.13.0, module: +21%; Apple clang 21, -O2, server_config, 3.13.0: +45%; Apple clang 21, -O2, server_config, 3.13.0, precompiled header: +10%; Apple clang 21, -O2, server_config, 3.13.0, module: +24%; G​CC 16, -O0 (debug), count_numbers, 3.13.0: +62%; G​CC 16, -O0 (debug), count_numbers, 3.13.0, precompiled header: +10%; G​CC 16, -O0 (debug), count_numbers, 3.13.0, module: +8%; G​CC 16, -O0 (debug), server_config, 3.13.0: +47%; G​CC 16, -O0 (debug), server_config, 3.13.0, precompiled header: +14%; G​CC 16, -O0 (debug), server_config, 3.13.0, module: +15%; G​CC 16, -O2, count_numbers, 3.13.0: +58%; G​CC 16, -O2, count_numbers, 3.13.0, precompiled header: +28%; G​CC 16, -O2, count_numbers, 3.13.0, module: +25%; G​CC 16, -O2, server_config, 3.13.0: +51%; G​CC 16, -O2, server_config, 3.13.0, precompiled header: +28%; G​CC 16, -O2, server_config, 3.13.0, module: +30%. + +3.13.0 + +3.13.0, precompiled header + +3.13.0, module +as fast as 3.12.0 +Apple clang 21, -O0 (debug) + + + + + +count_numbers +count_numbers, Apple clang 21, -O0 (debug), 3.13.0: 1,320 ms against 955 ms with 3.12.0 (+38%) ++38% +count_numbers, Apple clang 21, -O0 (debug), 3.13.0, precompiled header: 688 ms against 955 ms with 3.12.0 (−28%) +−28% +count_numbers, Apple clang 21, -O0 (debug), 3.13.0, module: 918 ms against 955 ms with 3.12.0 (−4%) +−4% +server_config +server_config, Apple clang 21, -O0 (debug), 3.13.0: 1,496 ms against 1,113 ms with 3.12.0 (+34%) ++34% +server_config, Apple clang 21, -O0 (debug), 3.13.0, precompiled header: 863 ms against 1,113 ms with 3.12.0 (−23%) +−23% +server_config, Apple clang 21, -O0 (debug), 3.13.0, module: 1,136 ms against 1,113 ms with 3.12.0 (+2%) ++2% +Apple clang 21, -O2 + + + + + +count_numbers +count_numbers, Apple clang 21, -O2, 3.13.0: 2,081 ms against 1,393 ms with 3.12.0 (+49%) ++49% +count_numbers, Apple clang 21, -O2, 3.13.0, precompiled header: 1,458 ms against 1,393 ms with 3.12.0 (+5%) ++5% +count_numbers, Apple clang 21, -O2, 3.13.0, module: 1,685 ms against 1,393 ms with 3.12.0 (+21%) ++21% +server_config +server_config, Apple clang 21, -O2, 3.13.0: 2,546 ms against 1,754 ms with 3.12.0 (+45%) ++45% +server_config, Apple clang 21, -O2, 3.13.0, precompiled header: 1,925 ms against 1,754 ms with 3.12.0 (+10%) ++10% +server_config, Apple clang 21, -O2, 3.13.0, module: 2,169 ms against 1,754 ms with 3.12.0 (+24%) ++24% +G​CC 16, -O0 (debug) + + + + + +count_numbers +count_numbers, G​CC 16, -O0 (debug), 3.13.0: 2,548 ms against 1,569 ms with 3.12.0 (+62%) ++62% +count_numbers, G​CC 16, -O0 (debug), 3.13.0, precompiled header: 1,725 ms against 1,569 ms with 3.12.0 (+10%) ++10% +count_numbers, G​CC 16, -O0 (debug), 3.13.0, module: 1,700 ms against 1,569 ms with 3.12.0 (+8%) ++8% +server_config +server_config, G​CC 16, -O0 (debug), 3.13.0: 2,985 ms against 2,025 ms with 3.12.0 (+47%) ++47% +server_config, G​CC 16, -O0 (debug), 3.13.0, precompiled header: 2,302 ms against 2,025 ms with 3.12.0 (+14%) ++14% +server_config, G​CC 16, -O0 (debug), 3.13.0, module: 2,326 ms against 2,025 ms with 3.12.0 (+15%) ++15% +G​CC 16, -O2 + + + + + +count_numbers +count_numbers, G​CC 16, -O2, 3.13.0: 3,702 ms against 2,336 ms with 3.12.0 (+58%) ++58% +count_numbers, G​CC 16, -O2, 3.13.0, precompiled header: 2,987 ms against 2,336 ms with 3.12.0 (+28%) ++28% +count_numbers, G​CC 16, -O2, 3.13.0, module: 2,913 ms against 2,336 ms with 3.12.0 (+25%) ++25% +server_config +server_config, G​CC 16, -O2, 3.13.0: 4,714 ms against 3,122 ms with 3.12.0 (+51%) ++51% +server_config, G​CC 16, -O2, 3.13.0, precompiled header: 4,006 ms against 3,122 ms with 3.12.0 (+28%) ++28% +server_config, G​CC 16, -O2, 3.13.0, module: 4,055 ms against 3,122 ms with 3.12.0 (+30%) ++30% + +−40% +−20% +0 ++20% ++40% ++60% +compile time compared with 3.12.0, less is better + diff --git a/docs/mkdocs/docs/images/perf_blog_swar.svg b/docs/mkdocs/docs/images/perf_blog_swar.svg new file mode 100644 index 000000000..506c2dfc9 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_swar.svg @@ -0,0 +1,60 @@ + +Finding the end of a run of ordinary string characters eight bytes at a time +The eight bytes w, i, t, t, e, r, quote and comma are loaded as one word. The test sets the high bit only in byte 6, the quote. Counting trailing zero bits gives 55, divided by eight gives 6: bytes 0 to 5 are copied at once, then the quote ends the string. +eight input bytes, loaded as one 64-bit word (byte 0 is the lowest) + +w +0x77 +byte 0 + +i +0x69 +byte 1 + +t +0x74 +byte 2 + +t +0x74 +byte 3 + +e +0x65 +byte 4 + +r +0x72 +byte 5 + + +" +0x22 +byte 6 + +, +0x2C +byte 7 +swar_string_special(): the high bit of each byte that needs handling + +0x00 + +0x00 + +0x00 + +0x00 + +0x00 + +0x00 + + +0x80 + +0x00 +count_trailing_zeros(0x0080000000000000) = 55 +55 / 8 = 6: copy bytes 0 to 5 in one go, then handle the quote +No branch per byte: a few subtractions, ANDs and ORs per word, +then one count of trailing zeros. + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_accept_twitter.svg b/docs/mkdocs/docs/images/perf_blog_timeline_accept_twitter.svg new file mode 100644 index 000000000..49c77004d --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_accept_twitter.svg @@ -0,0 +1,45 @@ + +accept() twitter.json: speedup over 3.12.0 by commit +accept() twitter.json: speedup over 3.12.0 at each of 353 commits, ending at 5.1x. Labeled steps, by theme: 4, 1, 4, 4, 2, 2. +accept() twitter.json + +1× + +2× + +4× + +8× + +3.12.0 + +Sep 2026 + +Oct + +#5234: 1.22× + + +4 +#5283: 2.6× + + +1 +#5592: 2.9× + + +4 +#5809: 3.7× +#5810: 4.0× + + +4 + +2 +#5853: 4.9× + + +2 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_dump_canada.svg b/docs/mkdocs/docs/images/perf_blog_timeline_dump_canada.svg new file mode 100644 index 000000000..91fc0e9b0 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_dump_canada.svg @@ -0,0 +1,30 @@ + +dump() canada.json: speedup over 3.12.0 by commit +dump() canada.json: speedup over 3.12.0 at each of 353 commits, ending at 3.3x. Labeled steps, by theme: 6, 3. +dump() canada.json + +1× + +2× + +4× + +8× + +3.12.0 + +Sep 2026 + +Oct + +#5285: 1.09× + + +6 +#5634: 3.1× + + +3 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_dump_twitter.svg b/docs/mkdocs/docs/images/perf_blog_timeline_dump_twitter.svg new file mode 100644 index 000000000..81ad49dae --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_dump_twitter.svg @@ -0,0 +1,37 @@ + +dump() twitter.json: speedup over 3.12.0 by commit +dump() twitter.json: speedup over 3.12.0 at each of 353 commits, ending at 6.8x. Labeled steps, by theme: 6, 2, 2, 2. +dump() twitter.json + +1× + +2× + +4× + +8× + +16× + +3.12.0 + +Sep 2026 + +Oct + +#5285: 3.3× + + +6 +#5738: 3.8× + + +2 +#5878: 4.5× +#5883: 6.8× + + +2 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_from_cbor_twitter.svg b/docs/mkdocs/docs/images/perf_blog_timeline_from_cbor_twitter.svg new file mode 100644 index 000000000..278255d93 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_from_cbor_twitter.svg @@ -0,0 +1,36 @@ + +from_cbor() twitter: speedup over 3.12.0 by commit +from_cbor() twitter: speedup over 3.12.0 at each of 353 commits, ending at 2.6x. Labeled steps, by theme: 1, 4, U, U. +from_cbor() twitter + +1× + +2× + +4× + +3.12.0 + +Sep 2026 + +Oct + +#5233: 1.47× + + +1 +#5501: 2.2× + + +4 +#5185: 1.76× + + +U +#5746: 2.3× + + +U + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_parse_canada.svg b/docs/mkdocs/docs/images/perf_blog_timeline_parse_canada.svg new file mode 100644 index 000000000..b325a346d --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_parse_canada.svg @@ -0,0 +1,44 @@ + +parse() canada.json: speedup over 3.12.0 by commit +parse() canada.json: speedup over 3.12.0 at each of 353 commits, ending at 2.8x. Labeled steps, by theme: 4, 1, 3, 3, 3, 4. +parse() canada.json + +1× + +2× + +4× + +3.12.0 + +Sep 2026 + +Oct + +#5234: 1.11× + + +4 +#5283: 1.47× + + +1 +#5617: 1.48× + + +3 +#5738: 1.95× + + +3 +#5851: 2.2× + + +3 +#5882: 2.8× + + +4 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_parse_citm.svg b/docs/mkdocs/docs/images/perf_blog_timeline_parse_citm.svg new file mode 100644 index 000000000..d4eec81df --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_parse_citm.svg @@ -0,0 +1,45 @@ + +parse() citm_catalog.json: speedup over 3.12.0 by commit +parse() citm_catalog.json: speedup over 3.12.0 at each of 353 commits, ending at 3.3x. Labeled steps, by theme: 4, 1, 4, 4, 2, 4. +parse() citm_catalog.json + +1× + +2× + +4× + +8× + +3.12.0 + +Sep 2026 + +Oct + +#5234: 1.55× + + +4 +#5283: 1.95× + + +1 +#5592: 2.2× + + +4 +#5809: 2.4× +#5810: 2.8× + + +4 + +2 +#5882: 3.3× + + +4 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_parse_twitter_ifstream.svg b/docs/mkdocs/docs/images/perf_blog_timeline_parse_twitter_ifstream.svg new file mode 100644 index 000000000..4abcdc305 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_parse_twitter_ifstream.svg @@ -0,0 +1,28 @@ + +parse() twitter.json, std::ifstream: speedup over 3.12.0 by commit +parse() twitter.json, std::ifstream: speedup over 3.12.0 at each of 353 commits, ending at 2.2x. Labeled steps, by theme: 1, 1. +parse() twitter.json, std::ifstream + +1× + +2× + +4× + +3.12.0 + +Sep 2026 + +Oct + +#5828: 1.97× + + +1 +#5884: 2.2× + + +1 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_timeline_to_cbor_twitter.svg b/docs/mkdocs/docs/images/perf_blog_timeline_to_cbor_twitter.svg new file mode 100644 index 000000000..ce9e9a202 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_timeline_to_cbor_twitter.svg @@ -0,0 +1,34 @@ + +to_cbor() twitter: speedup over 3.12.0 by commit +to_cbor() twitter: speedup over 3.12.0 at each of 353 commits, ending at 5.0x. Labeled steps, by theme: 4, 6, 6. +to_cbor() twitter + +1× + +2× + +4× + +8× + +3.12.0 + +Sep 2026 + +Oct + +#5328: 2.2× + + +4 +#5824: 3.5× + + +6 +#5885: 5.1× + + +6 + +speedup over 3.12.0 (log scale), more is better + diff --git a/docs/mkdocs/docs/images/perf_blog_usecases_mac.svg b/docs/mkdocs/docs/images/perf_blog_usecases_mac.svg new file mode 100644 index 000000000..ed3f9bcae --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_usecases_mac.svg @@ -0,0 +1,379 @@ + +Use cases: time of each library relative to the fastest, Apple M1 Max +Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.00; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00 (0.85 doing less, N); nlohmann/json json_document minify: 1.00 (0.85 doing less, N); nlohmann/json json_document write: 1.00 (0.71 doing less, N); yyjson validate: 1.37; yyjson sum: 1.11; yyjson select: 1.25; yyjson edit: 1.45; yyjson minify: 1.23 (1.16 doing less, N); yyjson write: 1.26; simdjson validate: 1.52; simdjson sum: 1.20; simdjson select: 1.33 (0.75 doing less, P); simdjson edit: n/a; simdjson minify: 1.73 (0.18 doing less, P); simdjson write: 2.41; sonic-rs (Rust) validate: 1.93; sonic-rs (Rust) sum: 1.53; sonic-rs (Rust) select: 1.83; sonic-rs (Rust) edit: 2.08; sonic-rs (Rust) minify: 1.93; sonic-rs (Rust) write: 2.38; sonic-cpp validate: no fully validating way (2.53 doing less, U); sonic-cpp sum: no fully validating way (1.86 doing less, U); sonic-cpp select: no fully validating way (2.31 doing less, U); sonic-cpp edit: no fully validating way (1.68 doing less, U); sonic-cpp minify: no fully validating way (2.03 doing less, U); sonic-cpp write: 1.59; simd-json (Rust) validate: 2.07; simd-json (Rust) sum: 1.62; simd-json (Rust) select: 2.38; simd-json (Rust) edit: 2.84; simd-json (Rust) minify: 3.40; simd-json (Rust) write: 3.10; Glaze validate: 2.04; Glaze sum: 3.85; Glaze select: 1.79 (0.82 doing less, P); Glaze edit: 4.41; Glaze minify: 5.19 (1.03 doing less, P); Glaze write: 2.23; Boost.J​SON validate: 2.56; Boost.J​SON sum: 1.99; Boost.J​SON select: 3.27; Boost.J​SON edit: 3.21; Boost.J​SON minify: 3.87; Boost.J​SON write: 3.75; serde_json (Rust) validate: 2.46 (2.23 doing less, U); serde_json (Rust) sum: 2.59; serde_json (Rust) select: 2.39 (2.24 doing less, U); serde_json (Rust) edit: 4.99; serde_json (Rust) minify: 5.85; serde_json (Rust) write: 2.95; nlohmann/json json validate: 2.71; nlohmann/json json sum: 1.96; nlohmann/json json select: 6.87; nlohmann/json json edit: 3.73; nlohmann/json json minify: 4.89; nlohmann/json json write: 2.10; RapidJSON validate: 4.72 (3.09 doing less, U); RapidJSON sum: 4.15 (2.85 doing less, U); RapidJSON select: 5.91 (3.82 doing less, U); RapidJSON edit: 4.82 (3.77 doing less, U); RapidJSON minify: 4.86 (3.60 doing less, U N); RapidJSON write: 5.88. +validate +sum +select +edit +minify +write +nlohmann/json json_document + + +1.00 + + + +1.00 + + + +1.00 + + + +1.00 + + + +0.85 +N + + + +1.00 + + + +0.85 +N + + + +1.00 + + + +0.71 +N + +yyjson + + +1.37 + + + +1.11 + + + +1.25 + + + +1.45 + + + +1.23 + + + +1.16 +N + + + +1.26 + +simdjson + + +1.52 + + + +1.20 + + + +1.33 + + + +0.75 +P + + + +n/a + + + +1.73 + + + +0.18 +P + + + +2.41 + +sonic-rs (Rust) + + +1.93 + + + +1.53 + + + +1.83 + + + +2.08 + + + +1.93 + + + +2.38 + +sonic-cpp + + +2.53 +U + + + +1.86 +U + + + +2.31 +U + + + +1.68 +U + + + +2.03 +U + + + +1.59 + +simd-json (Rust) + + +2.07 + + + +1.62 + + + +2.38 + + + +2.84 + + + +3.40 + + + +3.10 + +Glaze + + +2.04 + + + +3.85 + + + +1.79 + + + +0.82 +P + + + +4.41 + + + +5.19 + + + +1.03 +P + + + +2.23 + +Boost.J​SON + + +2.56 + + + +1.99 + + + +3.27 + + + +3.21 + + + +3.87 + + + +3.75 + +serde_json (Rust) + + +2.46 + + + +2.23 +U + + + +2.59 + + + +2.39 + + + +2.24 +U + + + +4.99 + + + +5.85 + + + +2.95 + +nlohmann/json json + + +2.71 + + + +1.96 + + + +6.87 + + + +3.73 + + + +4.89 + + + +2.10 + +RapidJSON + + +4.72 + + + +3.09 +U + + + +4.15 + + + +2.85 +U + + + +5.91 + + + +3.82 +U + + + +4.82 + + + +3.77 +U + + + +4.86 + + + +3.60 +U N + + + +5.88 + +time relative to the fastest fully validating library, less is better + +below 1.15 + +1.15 to 1.5 + +1.5 to 2.5 + +2.5 to 5 + +5 and more + +n/a +no A​PI for it + diff --git a/docs/mkdocs/docs/images/perf_blog_usecases_x86-clang.svg b/docs/mkdocs/docs/images/perf_blog_usecases_x86-clang.svg new file mode 100644 index 000000000..8bcd534b3 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_usecases_x86-clang.svg @@ -0,0 +1,379 @@ + +Use cases: time of each library relative to the fastest, x86-64 with Clang 23 +Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.00; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00 (0.81 doing less, N); nlohmann/json json_document minify: 1.00 (0.83 doing less, N); nlohmann/json json_document write: 1.00 (0.69 doing less, N); yyjson validate: 1.87; yyjson sum: 1.00; yyjson select: 1.23; yyjson edit: 1.43; yyjson minify: 1.16 (1.00 doing less, N); yyjson write: 1.14; sonic-cpp validate: no fully validating way (2.32 doing less, U); sonic-cpp sum: no fully validating way (1.20 doing less, U); sonic-cpp select: no fully validating way (1.53 doing less, U); sonic-cpp edit: no fully validating way (1.24 doing less, U); sonic-cpp minify: no fully validating way (1.38 doing less, U); sonic-cpp write: 1.28; simdjson validate: 2.03; simdjson sum: 1.13; simdjson select: 1.32 (0.57 doing less, P); simdjson edit: n/a; simdjson minify: 1.58 (0.18 doing less, P); simdjson write: 2.00; sonic-rs (Rust) validate: 1.88; sonic-rs (Rust) sum: 1.07; sonic-rs (Rust) select: 1.39; sonic-rs (Rust) edit: 1.90; sonic-rs (Rust) minify: 1.73; sonic-rs (Rust) write: 1.94; Boost.J​SON validate: 1.79; Boost.J​SON sum: 1.12; Boost.J​SON select: 2.24; Boost.J​SON edit: 2.39; Boost.J​SON minify: 2.68; Boost.J​SON write: 2.31; simd-json (Rust) validate: 3.52; simd-json (Rust) sum: 1.80; simd-json (Rust) select: 2.64; simd-json (Rust) edit: 2.88; simd-json (Rust) minify: 3.38; simd-json (Rust) write: 2.21; serde_json (Rust) validate: 2.33 (2.08 doing less, U); serde_json (Rust) sum: 2.22; serde_json (Rust) select: 1.77; serde_json (Rust) edit: 4.54; serde_json (Rust) minify: 4.92; serde_json (Rust) write: 2.15; Glaze validate: 2.23; Glaze sum: 4.03 (3.78 doing less, P); Glaze select: 1.43 (0.62 doing less, P); Glaze edit: 5.53; Glaze minify: 5.77 (0.70 doing less, P); Glaze write: 1.90; nlohmann/json json validate: 2.77; nlohmann/json json sum: 1.44; nlohmann/json json select: 7.56; nlohmann/json json edit: 3.99; nlohmann/json json minify: 4.91; nlohmann/json json write: 1.86; RapidJSON validate: 4.94 (3.76 doing less, U); RapidJSON sum: 2.98 (2.28 doing less, U); RapidJSON select: 4.20 (3.27 doing less, U); RapidJSON edit: 3.06 (2.60 doing less, U); RapidJSON minify: 3.61 (2.65 doing less, U N); RapidJSON write: 2.79. +validate +sum +select +edit +minify +write +nlohmann/json json_document + + +1.00 + + + +1.00 + + + +1.00 + + + +1.00 + + + +0.81 +N + + + +1.00 + + + +0.83 +N + + + +1.00 + + + +0.69 +N + +yyjson + + +1.87 + + + +1.00 + + + +1.23 + + + +1.43 + + + +1.16 + + + +1.00 +N + + + +1.14 + +sonic-cpp + + +2.32 +U + + + +1.20 +U + + + +1.53 +U + + + +1.24 +U + + + +1.38 +U + + + +1.28 + +simdjson + + +2.03 + + + +1.13 + + + +1.32 + + + +0.57 +P + + + +n/a + + + +1.58 + + + +0.18 +P + + + +2.00 + +sonic-rs (Rust) + + +1.88 + + + +1.07 + + + +1.39 + + + +1.90 + + + +1.73 + + + +1.94 + +Boost.J​SON + + +1.79 + + + +1.12 + + + +2.24 + + + +2.39 + + + +2.68 + + + +2.31 + +simd-json (Rust) + + +3.52 + + + +1.80 + + + +2.64 + + + +2.88 + + + +3.38 + + + +2.21 + +serde_json (Rust) + + +2.33 + + + +2.08 +U + + + +2.22 + + + +1.77 + + + +4.54 + + + +4.92 + + + +2.15 + +Glaze + + +2.23 + + + +4.03 + + + +3.78 +P + + + +1.43 + + + +0.62 +P + + + +5.53 + + + +5.77 + + + +0.70 +P + + + +1.90 + +nlohmann/json json + + +2.77 + + + +1.44 + + + +7.56 + + + +3.99 + + + +4.91 + + + +1.86 + +RapidJSON + + +4.94 + + + +3.76 +U + + + +2.98 + + + +2.28 +U + + + +4.20 + + + +3.27 +U + + + +3.06 + + + +2.60 +U + + + +3.61 + + + +2.65 +U N + + + +2.79 + +time relative to the fastest fully validating library, less is better + +below 1.15 + +1.15 to 1.5 + +1.5 to 2.5 + +2.5 to 5 + +5 and more + +n/a +no A​PI for it + diff --git a/docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc.svg b/docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc.svg new file mode 100644 index 000000000..c95d72a12 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc.svg @@ -0,0 +1,374 @@ + +Use cases: time of each library relative to the fastest, x86-64 with G​CC 16.2 +Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.08; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00 (0.79 doing less, N); nlohmann/json json_document minify: 1.00 (0.80 doing less, N); nlohmann/json json_document write: 1.00 (0.64 doing less, N); yyjson validate: 1.94; yyjson sum: 1.14; yyjson select: 1.18; yyjson edit: 1.37; yyjson minify: 1.17 (0.95 doing less, N); yyjson write: 1.11; sonic-cpp validate: no fully validating way (2.32 doing less, U); sonic-cpp sum: no fully validating way (1.24 doing less, U); sonic-cpp select: no fully validating way (1.45 doing less, U); sonic-cpp edit: no fully validating way (1.21 doing less, U); sonic-cpp minify: no fully validating way (1.36 doing less, U); sonic-cpp write: 1.45; simdjson validate: 2.11; simdjson sum: 1.00; simdjson select: 1.27 (0.54 doing less, P); simdjson edit: n/a; simdjson minify: 1.54 (0.17 doing less, P); simdjson write: 2.10; sonic-rs (Rust) validate: 1.93; sonic-rs (Rust) sum: 1.13; sonic-rs (Rust) select: 1.34; sonic-rs (Rust) edit: 1.90; sonic-rs (Rust) minify: 1.71; sonic-rs (Rust) write: 2.04; Boost.J​SON validate: 1.99; Boost.J​SON sum: 1.27; Boost.J​SON select: 2.20; Boost.J​SON edit: 2.30; Boost.J​SON minify: 2.65; Boost.J​SON write: 2.36; simd-json (Rust) validate: 3.62; simd-json (Rust) sum: 1.91; simd-json (Rust) select: 2.56; simd-json (Rust) edit: 2.87; simd-json (Rust) minify: 3.35; simd-json (Rust) write: 2.32; RapidJSON validate: 3.71 (3.41 doing less, U); RapidJSON sum: 2.23 (2.09 doing less, U); RapidJSON select: 2.91 (2.73 doing less, U); RapidJSON edit: 2.41 (2.34 doing less, U); RapidJSON minify: 2.68 (2.42 doing less, U N); RapidJSON write: 2.97; serde_json (Rust) validate: 2.39 (2.14 doing less, U); serde_json (Rust) sum: 2.36; serde_json (Rust) select: 1.71; serde_json (Rust) edit: 4.53; serde_json (Rust) minify: 4.89; serde_json (Rust) write: 2.25; Glaze validate: 2.86; Glaze sum: 4.16; Glaze select: 1.79 (0.58 doing less, P); Glaze edit: 4.47; Glaze minify: 4.81 (0.78 doing less, P); Glaze write: 1.96; nlohmann/json json validate: 2.96; nlohmann/json json sum: 1.70; nlohmann/json json select: 7.12; nlohmann/json json edit: 3.83; nlohmann/json json minify: 4.79; nlohmann/json json write: 1.91. +validate +sum +select +edit +minify +write +nlohmann/json json_document + + +1.00 + + + +1.08 + + + +1.00 + + + +1.00 + + + +0.79 +N + + + +1.00 + + + +0.80 +N + + + +1.00 + + + +0.64 +N + +yyjson + + +1.94 + + + +1.14 + + + +1.18 + + + +1.37 + + + +1.17 + + + +0.95 +N + + + +1.11 + +sonic-cpp + + +2.32 +U + + + +1.24 +U + + + +1.45 +U + + + +1.21 +U + + + +1.36 +U + + + +1.45 + +simdjson + + +2.11 + + + +1.00 + + + +1.27 + + + +0.54 +P + + + +n/a + + + +1.54 + + + +0.17 +P + + + +2.10 + +sonic-rs (Rust) + + +1.93 + + + +1.13 + + + +1.34 + + + +1.90 + + + +1.71 + + + +2.04 + +Boost.J​SON + + +1.99 + + + +1.27 + + + +2.20 + + + +2.30 + + + +2.65 + + + +2.36 + +simd-json (Rust) + + +3.62 + + + +1.91 + + + +2.56 + + + +2.87 + + + +3.35 + + + +2.32 + +RapidJSON + + +3.71 + + + +3.41 +U + + + +2.23 + + + +2.09 +U + + + +2.91 + + + +2.73 +U + + + +2.41 + + + +2.34 +U + + + +2.68 + + + +2.42 +U N + + + +2.97 + +serde_json (Rust) + + +2.39 + + + +2.14 +U + + + +2.36 + + + +1.71 + + + +4.53 + + + +4.89 + + + +2.25 + +Glaze + + +2.86 + + + +4.16 + + + +1.79 + + + +0.58 +P + + + +4.47 + + + +4.81 + + + +0.78 +P + + + +1.96 + +nlohmann/json json + + +2.96 + + + +1.70 + + + +7.12 + + + +3.83 + + + +4.79 + + + +1.91 + +time relative to the fastest fully validating library, less is better + +below 1.15 + +1.15 to 1.5 + +1.5 to 2.5 + +2.5 to 5 + +5 and more + +n/a +no A​PI for it + diff --git a/docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc13.svg b/docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc13.svg new file mode 100644 index 000000000..ebb039306 --- /dev/null +++ b/docs/mkdocs/docs/images/perf_blog_usecases_x86-gcc13.svg @@ -0,0 +1,374 @@ + +Use cases: time of each library relative to the fastest, x86-64 with G​CC 13 +Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.08; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00 (0.83 doing less, N); nlohmann/json json_document minify: 1.00 (0.83 doing less, N); nlohmann/json json_document write: 1.00 (0.71 doing less, N); yyjson validate: 1.81; yyjson sum: 1.28; yyjson select: 1.22; yyjson edit: 1.49; yyjson minify: 1.27 (0.97 doing less, N); yyjson write: 1.14; sonic-cpp validate: no fully validating way (2.24 doing less, U); sonic-cpp sum: no fully validating way (1.28 doing less, U); sonic-cpp select: no fully validating way (1.53 doing less, U); sonic-cpp edit: no fully validating way (1.26 doing less, U); sonic-cpp minify: no fully validating way (1.42 doing less, U); sonic-cpp write: 1.50; simdjson validate: 2.01; simdjson sum: 1.00; simdjson select: 1.35 (0.57 doing less, P); simdjson edit: n/a; simdjson minify: 1.58 (0.22 doing less, P); simdjson write: 2.07; sonic-rs (Rust) validate: 1.79; sonic-rs (Rust) sum: 1.11; sonic-rs (Rust) select: 1.37; sonic-rs (Rust) edit: 1.91; sonic-rs (Rust) minify: 1.73; sonic-rs (Rust) write: 2.07; Boost.J​SON validate: 1.88; Boost.J​SON sum: 1.33; Boost.J​SON select: 2.30; Boost.J​SON edit: 2.55; Boost.J​SON minify: 2.92; Boost.J​SON write: 2.56; simd-json (Rust) validate: 3.35; simd-json (Rust) sum: 1.88; simd-json (Rust) select: 2.61; simd-json (Rust) edit: 2.89; simd-json (Rust) minify: 3.39; simd-json (Rust) write: 2.35; serde_json (Rust) validate: 2.22 (1.98 doing less, U); serde_json (Rust) sum: 2.32; serde_json (Rust) select: 1.75; serde_json (Rust) edit: 4.55; serde_json (Rust) minify: 4.94; serde_json (Rust) write: 2.28; Glaze validate: 2.21; Glaze sum: 4.04; Glaze select: 1.44 (0.60 doing less, P); Glaze edit: 4.85; Glaze minify: 5.10 (0.73 doing less, P); Glaze write: 1.84; nlohmann/json json validate: 2.74; nlohmann/json json sum: 1.67; nlohmann/json json select: 7.24; nlohmann/json json edit: 3.81; nlohmann/json json minify: 4.79; nlohmann/json json write: 1.99; RapidJSON validate: 4.50 (3.40 doing less, U); RapidJSON sum: 2.98 (2.29 doing less, U); RapidJSON select: 3.84 (3.06 doing less, U); RapidJSON edit: 2.92 (2.58 doing less, U); RapidJSON minify: 3.64 (2.64 doing less, U N); RapidJSON write: 3.11. +validate +sum +select +edit +minify +write +nlohmann/json json_document + + +1.00 + + + +1.08 + + + +1.00 + + + +1.00 + + + +0.83 +N + + + +1.00 + + + +0.83 +N + + + +1.00 + + + +0.71 +N + +yyjson + + +1.81 + + + +1.28 + + + +1.22 + + + +1.49 + + + +1.27 + + + +0.97 +N + + + +1.14 + +sonic-cpp + + +2.24 +U + + + +1.28 +U + + + +1.53 +U + + + +1.26 +U + + + +1.42 +U + + + +1.50 + +simdjson + + +2.01 + + + +1.00 + + + +1.35 + + + +0.57 +P + + + +n/a + + + +1.58 + + + +0.22 +P + + + +2.07 + +sonic-rs (Rust) + + +1.79 + + + +1.11 + + + +1.37 + + + +1.91 + + + +1.73 + + + +2.07 + +Boost.J​SON + + +1.88 + + + +1.33 + + + +2.30 + + + +2.55 + + + +2.92 + + + +2.56 + +simd-json (Rust) + + +3.35 + + + +1.88 + + + +2.61 + + + +2.89 + + + +3.39 + + + +2.35 + +serde_json (Rust) + + +2.22 + + + +1.98 +U + + + +2.32 + + + +1.75 + + + +4.55 + + + +4.94 + + + +2.28 + +Glaze + + +2.21 + + + +4.04 + + + +1.44 + + + +0.60 +P + + + +4.85 + + + +5.10 + + + +0.73 +P + + + +1.84 + +nlohmann/json json + + +2.74 + + + +1.67 + + + +7.24 + + + +3.81 + + + +4.79 + + + +1.99 + +RapidJSON + + +4.50 + + + +3.40 +U + + + +2.98 + + + +2.29 +U + + + +3.84 + + + +3.06 +U + + + +2.92 + + + +2.58 +U + + + +3.64 + + + +2.64 +U N + + + +3.11 + +time relative to the fastest fully validating library, less is better + +below 1.15 + +1.15 to 1.5 + +1.5 to 2.5 + +2.5 to 5 + +5 and more + +n/a +no A​PI for it + diff --git a/docs/mkdocs/docs/js/external-links.js b/docs/mkdocs/docs/js/external-links.js index bdafe4c2a..ab6761ef2 100644 --- a/docs/mkdocs/docs/js/external-links.js +++ b/docs/mkdocs/docs/js/external-links.js @@ -1,7 +1,8 @@ /* * Marks links that leave the site with the class "nj-external", which brand.css turns into a small icon in front of * the link. A link is external when its host is neither the current one nor the production site. Links in the page - * actions (edit, raw), buttons, header anchors, and links that only wrap an image (badges) are left alone. + * actions (edit, raw), buttons, header anchors, a blog post's byline, and links that only wrap an image (badges) are + * left alone. * Runs through Material's document$ (navigation.instant), so it also applies after an instant page switch. */ (function () { @@ -17,7 +18,7 @@ if (a.protocol !== "http:" && a.protocol !== "https:") { continue; } - if (a.matches(".md-button, .md-content__button, .headerlink") || a.querySelector("img, svg")) { + if (a.matches(".md-button, .md-content__button, .headerlink, .nj-byline a") || a.querySelector("img, svg")) { continue; } a.classList.add("nj-external"); diff --git a/docs/mkdocs/docs/js/fig-charts.js b/docs/mkdocs/docs/js/fig-charts.js index 310987811..5c88da66f 100644 --- a/docs/mkdocs/docs/js/fig-charts.js +++ b/docs/mkdocs/docs/js/fig-charts.js @@ -104,3 +104,72 @@ init(); } })(); + +/* figures: the tooltips of the heatmaps in home/blog/how_3_13_0_got_faster.md (perf_blog_usecases_*.svg). Each + cell is a focusable : its lines (the first one the heading) are shown on hover, keyboard focus or tap. + Without JS, the figure's and the tables in the appendix carry the same numbers. */ +(function () { + "use strict"; + + var tip = null; + var current = null; + + function show(cell) { + if (!tip) { + tip = document.createElement("div"); + tip.className = "nj-heat-tip"; + tip.setAttribute("role", "tooltip"); + tip.hidden = true; + document.body.appendChild(tip); + } + if (current) current.classList.remove("nj-heat-on"); + current = cell; + cell.classList.add("nj-heat-on"); + var lines = (cell.getAttribute("data-tip") || "").split("\n"); + tip.textContent = ""; + lines.forEach(function (line, i) { + var el = document.createElement(i === 0 ? "strong" : "div"); + el.textContent = line; + tip.appendChild(el); + }); + tip.hidden = false; + var r = cell.getBoundingClientRect(); + var w = tip.offsetWidth, h = tip.offsetHeight; + var x = Math.min(Math.max(8, r.left + r.width / 2 - w / 2), document.documentElement.clientWidth - w - 8); + var y = r.bottom + 8 + h > window.innerHeight ? r.top - h - 8 : r.bottom + 8; + tip.style.left = (x + window.scrollX) + "px"; + tip.style.top = (y + window.scrollY) + "px"; + } + + function hide() { + if (current) current.classList.remove("nj-heat-on"); + current = null; + if (tip) tip.hidden = true; + } + + function init() { + hide(); + Array.prototype.forEach.call(document.querySelectorAll("svg.nj-charts--heat .nj-heat-cell"), function (cell) { + if (cell.dataset.njHeatReady) return; + cell.dataset.njHeatReady = "1"; + cell.addEventListener("mouseenter", function () { show(cell); }); + cell.addEventListener("mouseleave", hide); + cell.addEventListener("focus", function () { show(cell); }); + cell.addEventListener("blur", hide); + // a tap also focuses the cell; a tap elsewhere or Escape hides the tooltip + cell.addEventListener("click", function (ev) { ev.stopPropagation(); show(cell); }); + }); + } + + document.addEventListener("click", hide); + document.addEventListener("keydown", function (ev) { if (ev.key === "Escape") hide(); }); + window.addEventListener("scroll", hide, { passive: true }); + + if (typeof document$ !== "undefined" && document$ && typeof document$.subscribe === "function") { + document$.subscribe(init); + } else if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", init); + } else { + init(); + } +})(); diff --git a/docs/mkdocs/includes/glossary.md b/docs/mkdocs/includes/glossary.md index b84567b14..352c1dcf7 100644 --- a/docs/mkdocs/includes/glossary.md +++ b/docs/mkdocs/includes/glossary.md @@ -8,6 +8,7 @@ *[BDFL]: Benevolent Dictator for Life *[BJData]: Binary JData *[BON8]: Binary Object Notation 8 +*[BSL]: Boost Software License *[BSON]: Binary JSON *[CBOR]: Concise Binary Object Representation *[CC0]: Creative Commons Zero @@ -16,6 +17,7 @@ *[CUDA]: Compute Unified Device Architecture *[CVE]: Common Vulnerabilities and Exposures *[DOM]: Document Object Model +*[EDG]: Edison Design Group, maker of a C++ compiler front end *[EOF]: End of File *[FAQ]: Frequently Asked Questions *[GCC]: GNU Compiler Collection @@ -31,9 +33,11 @@ *[JSONC]: JSON with Comments *[JWCC]: JSON With Commas and Comments *[LLDB]: LLVM Debugger +*[LTO]: Link-Time Optimization *[LTS]: Long-Term Support *[MinGW]: Minimalist GNU for Windows *[MIT]: Massachusetts Institute of Technology +*[MPL]: Mozilla Public License *[MsgPack]: MessagePack *[MSVC]: Microsoft Visual C++ *[NaN]: Not a Number @@ -42,6 +46,7 @@ *[NEON]: Arm SIMD instruction set extension *[NUL]: Null character (U+0000, byte value 0) *[ODR]: One Definition Rule +*[PCH]: Precompiled Header *[REUSE]: Software licensing specification by the Free Software Foundation Europe *[RFC]: Request for Comments *[RTTI]: Runtime Type Information @@ -60,3 +65,4 @@ *[UDLs]: User-defined literals *[URL]: Uniform Resource Locator *[UTF]: Unicode Transformation Format +*[XOR]: Exclusive or diff --git a/docs/mkdocs/mkdocs.yml b/docs/mkdocs/mkdocs.yml index ce5cdc226..c0d3552e8 100644 --- a/docs/mkdocs/mkdocs.yml +++ b/docs/mkdocs/mkdocs.yml @@ -104,6 +104,8 @@ nav: - 'v2.0.0': home/releases/v2.0.0.md - 'v1.1.0': home/releases/v1.1.0.md - 'v1.0.0': home/releases/v1.0.0.md + - Blog: + - 'How 3.13.0 got faster': home/blog/how_3_13_0_got_faster.md - home/design_goals.md - home/architecture.md - home/customers.md @@ -610,6 +612,7 @@ plugins: Home: - index.md - home/*.md + - home/blog/*.md Features: - features/*.md - features/binary_formats/*.md diff --git a/docs/mkdocs/scripts/figures/data/perf_heldout_validate.json b/docs/mkdocs/scripts/figures/data/perf_heldout_validate.json new file mode 100644 index 000000000..ef9e601ca --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_heldout_validate.json @@ -0,0 +1,3202 @@ +{ + "mac": { + "apache_builds": { + "Boost.JSON": { + "us": 110.1, + "variant": "SAX" + }, + "Glaze": { + "us": 85.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 261.9, + "variant": "SAX (string stream)" + }, + "nlohmann json": { + "us": 108.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 38.7, + "variant": "accept" + }, + "serde_json": { + "us": 87.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 55.8, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 36.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 63.2, + "variant": "Value" + }, + "yyjson": { + "us": 54.5, + "variant": "read" + } + }, + "github_events": { + "Boost.JSON": { + "us": 57.3, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 35.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 141.8, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 41.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 14.2, + "variant": "accept" + }, + "serde_json": { + "us": 35.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 27.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 17.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 24.5, + "variant": "Value" + }, + "yyjson": { + "us": 19.0, + "variant": "read" + } + }, + "google_maps_api_compact_response": { + "Boost.JSON": { + "us": 11.8, + "variant": "SAX" + }, + "Glaze": { + "us": 12.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 26.5, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 18.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.5, + "variant": "accept" + }, + "serde_json": { + "us": 14.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 10.5, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 7.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 8.7, + "variant": "Value" + }, + "yyjson": { + "us": 6.4, + "variant": "read" + } + }, + "google_maps_api_response": { + "Boost.JSON": { + "us": 19.3, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 17.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 36.6, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 24.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 8.7, + "variant": "accept" + }, + "serde_json": { + "us": 20.7, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 13.4, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 9.4, + "variant": "DOM" + }, + "sonic-rs": { + "us": 14.7, + "variant": "Value" + }, + "yyjson": { + "us": 9.5, + "variant": "read" + } + }, + "gsoc-2018": { + "Boost.JSON": { + "us": 2792.0, + "variant": "SAX" + }, + "Glaze": { + "us": 1027.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 7114.9, + "variant": "SAX (string stream)" + }, + "nlohmann json": { + "us": 940.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 457.7, + "variant": "accept" + }, + "serde_json": { + "us": 1034.0, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 1246.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 842.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 758.0, + "variant": "Value" + }, + "yyjson": { + "us": 940.0, + "variant": "insitu (copy)" + } + }, + "instruments": { + "Boost.JSON": { + "us": 155.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 136.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 366.2, + "variant": "SAX (string stream)" + }, + "nlohmann json": { + "us": 206.4, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 71.5, + "variant": "accept" + }, + "serde_json": { + "us": 160.0, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 110.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 83.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 125.2, + "variant": "Value" + }, + "yyjson": { + "us": 79.1, + "variant": "insitu (copy)" + } + }, + "marine_ik": { + "Boost.JSON": { + "us": 2530.0, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 2292.5, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 3625.6, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 4140.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 1358.3, + "variant": "accept" + }, + "serde_json": { + "us": 2841.0, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 3150.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 2428.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 2910.2, + "variant": "Value" + }, + "yyjson": { + "us": 2402.7, + "variant": "insitu (copy)" + } + }, + "mesh": { + "Boost.JSON": { + "us": 591.5, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 510.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 775.0, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 1038.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 345.7, + "variant": "accept" + }, + "serde_json": { + "us": 607.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 729.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 621.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 768.4, + "variant": "Value" + }, + "yyjson": { + "us": 557.3, + "variant": "read" + } + }, + "mesh.pretty": { + "Boost.JSON": { + "us": 947.1, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 823.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1387.1, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 1337.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 707.2, + "variant": "accept" + }, + "serde_json": { + "us": 1129.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 1083.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 848.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1160.6, + "variant": "Value" + }, + "yyjson": { + "us": 952.0, + "variant": "read" + } + }, + "numbers": { + "Boost.JSON": { + "us": 88.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 88.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 132.6, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 148.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 59.3, + "variant": "accept" + }, + "serde_json": { + "us": 101.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 129.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 116.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 135.6, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 103.1, + "variant": "read" + } + }, + "random": { + "Boost.JSON": { + "us": 591.4, + "variant": "SAX" + }, + "Glaze": { + "us": 439.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1199.8, + "variant": "SAX (string stream)" + }, + "nlohmann json": { + "us": 703.4, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 206.9, + "variant": "accept" + }, + "serde_json": { + "us": 619.9, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 335.4, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 256.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 265.5, + "variant": "Value" + }, + "yyjson": { + "us": 316.3, + "variant": "read" + } + }, + "repeat": { + "Boost.JSON": { + "us": 10.5, + "variant": "SAX" + }, + "Glaze": { + "us": 6.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 14.3, + "variant": "SAX (string stream)" + }, + "nlohmann json": { + "us": 8.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 2.6, + "variant": "accept" + }, + "serde_json": { + "us": 9.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 5.7, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 4.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 5.6, + "variant": "Value" + }, + "yyjson": { + "us": 4.3, + "variant": "read" + } + }, + "semanticscholar-corpus": { + "Boost.JSON": { + "us": 8111.6, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 4538.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 20587.5, + "variant": "SAX" + }, + "nlohmann json": { + "us": 5144.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 2180.8, + "variant": "accept" + }, + "serde_json": { + "us": 4768.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 4728.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 3356.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 2766.9, + "variant": "Value" + }, + "yyjson": { + "us": 3572.0, + "variant": "insitu (copy)" + } + }, + "tree-pretty": { + "Boost.JSON": { + "us": 24.1, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 22.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 54.0, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 31.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 10.5, + "variant": "accept" + }, + "serde_json": { + "us": 26.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 17.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 11.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 17.1, + "variant": "Value" + }, + "yyjson": { + "us": 11.3, + "variant": "read" + } + }, + "twitter_api_compact_response": { + "Boost.JSON": { + "us": 9.0, + "variant": "SAX" + }, + "Glaze": { + "us": 5.5, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 24.3, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 8.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 3.0, + "variant": "accept" + }, + "serde_json": { + "us": 6.7, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 5.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 3.5, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4.7, + "variant": "Value" + }, + "yyjson": { + "us": 3.3, + "variant": "read" + } + }, + "twitter_api_response": { + "Boost.JSON": { + "us": 11.7, + "variant": "SAX" + }, + "Glaze": { + "us": 7.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 29.7, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 11.3, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 4.0, + "variant": "accept" + }, + "serde_json": { + "us": 9.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 6.7, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 4.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 7.7, + "variant": "Value" + }, + "yyjson": { + "us": 4.3, + "variant": "read" + } + }, + "twitter_timeline": { + "Boost.JSON": { + "us": 39.6, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 29.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 100.1, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 44.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 15.0, + "variant": "accept" + }, + "serde_json": { + "us": 33.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 29.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 17.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 26.4, + "variant": "Value" + }, + "yyjson": { + "us": 15.5, + "variant": "insitu (copy)" + } + }, + "twitterescaped": { + "Boost.JSON": { + "us": 552.2, + "variant": "SAX" + }, + "Glaze": { + "us": 469.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1182.0, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 679.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 201.8, + "variant": "accept" + }, + "serde_json": { + "us": 397.9, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 537.4, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 265.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 313.3, + "variant": "Value" + }, + "yyjson": { + "us": 217.6, + "variant": "read" + } + }, + "update-center": { + "Boost.JSON": { + "us": 539.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 414.1, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1321.5, + "variant": "SAX" + }, + "nlohmann json": { + "us": 441.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 194.5, + "variant": "accept" + }, + "serde_json": { + "us": 406.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 313.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 239.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 221.2, + "variant": "Value" + }, + "yyjson": { + "us": 239.7, + "variant": "read (raw numbers)" + } + } + }, + "x86-clang": { + "apache_builds": { + "Boost.JSON": { + "us": 103.5, + "variant": "SAX" + }, + "Glaze": { + "us": 133.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 350.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 120.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 54.6, + "variant": "accept" + }, + "serde_json": { + "us": 105.1, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 135.6, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 62.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 88.3, + "variant": "Value" + }, + "yyjson": { + "us": 85.4, + "variant": "read" + } + }, + "github_events": { + "Boost.JSON": { + "us": 39.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 59.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 182.1, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 56.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 22.6, + "variant": "accept" + }, + "serde_json": { + "us": 49.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 55.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 28.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 40.9, + "variant": "Value" + }, + "yyjson": { + "us": 33.5, + "variant": "read" + } + }, + "google_maps_api_compact_response": { + "Boost.JSON": { + "us": 14.7, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 19.6, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 43.1, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 25.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 9.7, + "variant": "accept" + }, + "serde_json": { + "us": 16.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 23.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 12.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 13.8, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 10.7, + "variant": "read" + } + }, + "google_maps_api_response": { + "Boost.JSON": { + "us": 26.4, + "variant": "SAX" + }, + "Glaze": { + "us": 27.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 53.9, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 33.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 14.1, + "variant": "accept" + }, + "serde_json": { + "us": 27.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 30.6, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 14.5, + "variant": "DOM" + }, + "sonic-rs": { + "us": 23.2, + "variant": "Value" + }, + "yyjson": { + "us": 17.1, + "variant": "insitu (copy)" + } + }, + "gsoc-2018": { + "Boost.JSON": { + "us": 1007.5, + "variant": "SAX" + }, + "Glaze": { + "us": 1854.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 8248.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 1280.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 703.5, + "variant": "accept" + }, + "serde_json": { + "us": 1498.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 2236.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1186.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1134.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1837.1, + "variant": "read" + } + }, + "instruments": { + "Boost.JSON": { + "us": 218.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 204.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 531.6, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 277.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 116.3, + "variant": "accept" + }, + "serde_json": { + "us": 212.4, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 290.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 126.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 229.3, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 152.2, + "variant": "read" + } + }, + "marine_ik": { + "Boost.JSON": { + "us": 2905.6, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 3265.5, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 5252.5, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 6658.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 2137.5, + "variant": "accept" + }, + "serde_json": { + "us": 4072.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 6669.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 4447.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4661.1, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 4052.9, + "variant": "read" + } + }, + "mesh": { + "Boost.JSON": { + "us": 989.9, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 711.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1357.4, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 1804.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 493.5, + "variant": "accept" + }, + "serde_json": { + "us": 910.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 1691.7, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1208.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1221.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1033.2, + "variant": "read" + } + }, + "mesh.pretty": { + "Boost.JSON": { + "us": 1145.4, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 1155.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 2100.1, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 2025.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 1101.0, + "variant": "accept" + }, + "serde_json": { + "us": 1483.7, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 2119.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1453.5, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1558.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1819.0, + "variant": "insitu (copy)" + } + }, + "numbers": { + "Boost.JSON": { + "us": 79.6, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 125.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 273.3, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 247.3, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 71.6, + "variant": "accept" + }, + "serde_json": { + "us": 163.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 261.5, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 197.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 161.8, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 178.6, + "variant": "read" + } + }, + "random": { + "Boost.JSON": { + "us": 877.6, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 658.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1755.9, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 929.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 351.7, + "variant": "accept" + }, + "serde_json": { + "us": 772.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 840.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 406.7, + "variant": "DOM" + }, + "sonic-rs": { + "us": 502.9, + "variant": "Value" + }, + "yyjson": { + "us": 525.8, + "variant": "insitu (copy)" + } + }, + "repeat": { + "Boost.JSON": { + "us": 14.0, + "variant": "SAX" + }, + "Glaze": { + "us": 10.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 21.2, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 11.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.4, + "variant": "accept" + }, + "serde_json": { + "us": 12.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 11.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 5.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 7.6, + "variant": "Value" + }, + "yyjson": { + "us": 8.0, + "variant": "read" + } + }, + "semanticscholar-corpus": { + "Boost.JSON": { + "us": 5393.9, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 7948.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 27685.7, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 7751.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 3290.4, + "variant": "accept" + }, + "serde_json": { + "us": 6204.0, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 9501.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 7595.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4777.5, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 6209.1, + "variant": "read" + } + }, + "tree-pretty": { + "Boost.JSON": { + "us": 34.1, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 37.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 72.2, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 46.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 18.3, + "variant": "accept" + }, + "serde_json": { + "us": 37.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 36.8, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 18.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 29.1, + "variant": "Value" + }, + "yyjson": { + "us": 19.5, + "variant": "read" + } + }, + "twitter_api_compact_response": { + "Boost.JSON": { + "us": 6.7, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 10.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 33.6, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 12.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 4.2, + "variant": "accept" + }, + "serde_json": { + "us": 7.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 11.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 5.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 6.7, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 5.8, + "variant": "read" + } + }, + "twitter_api_response": { + "Boost.JSON": { + "us": 10.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 13.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 41.0, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 16.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.7, + "variant": "accept" + }, + "serde_json": { + "us": 12.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 13.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 7.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 11.2, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 7.8, + "variant": "read" + } + }, + "twitter_timeline": { + "Boost.JSON": { + "us": 40.7, + "variant": "SAX" + }, + "Glaze": { + "us": 49.2, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 142.3, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 70.3, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 23.5, + "variant": "accept" + }, + "serde_json": { + "us": 45.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 54.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 30.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 43.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 27.8, + "variant": "insitu (copy)" + } + }, + "twitterescaped": { + "Boost.JSON": { + "us": 608.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 713.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1767.7, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 962.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 312.4, + "variant": "accept" + }, + "serde_json": { + "us": 702.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 856.4, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 407.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 628.9, + "variant": "Value" + }, + "yyjson": { + "us": 443.2, + "variant": "insitu (copy)" + } + }, + "update-center": { + "Boost.JSON": { + "us": 342.2, + "variant": "SAX" + }, + "Glaze": { + "us": 671.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1826.3, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 610.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 263.1, + "variant": "accept" + }, + "serde_json": { + "us": 490.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 650.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 336.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 383.6, + "variant": "Value" + }, + "yyjson": { + "us": 447.4, + "variant": "read" + } + } + }, + "x86-gcc": { + "apache_builds": { + "Boost.JSON": { + "us": 107.9, + "variant": "SAX" + }, + "Glaze": { + "us": 152.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 218.8, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 140.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 54.4, + "variant": "accept" + }, + "serde_json": { + "us": 105.1, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 135.6, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 60.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 88.3, + "variant": "Value" + }, + "yyjson": { + "us": 87.6, + "variant": "read (raw numbers)" + } + }, + "github_events": { + "Boost.JSON": { + "us": 40.5, + "variant": "SAX" + }, + "Glaze": { + "us": 72.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 112.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 56.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 21.1, + "variant": "accept" + }, + "serde_json": { + "us": 49.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 55.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 27.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 40.9, + "variant": "Value" + }, + "yyjson": { + "us": 35.5, + "variant": "read" + } + }, + "google_maps_api_compact_response": { + "Boost.JSON": { + "us": 15.3, + "variant": "SAX" + }, + "Glaze": { + "us": 21.5, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 24.7, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 26.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 8.9, + "variant": "accept" + }, + "serde_json": { + "us": 16.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 23.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 12.4, + "variant": "DOM" + }, + "sonic-rs": { + "us": 13.8, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 11.0, + "variant": "read" + } + }, + "google_maps_api_response": { + "Boost.JSON": { + "us": 26.9, + "variant": "SAX" + }, + "Glaze": { + "us": 34.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 34.9, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 36.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 13.7, + "variant": "accept" + }, + "serde_json": { + "us": 27.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 30.6, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 13.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 23.2, + "variant": "Value" + }, + "yyjson": { + "us": 17.5, + "variant": "read" + } + }, + "gsoc-2018": { + "Boost.JSON": { + "us": 1063.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 2067.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 4555.7, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 1317.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 698.7, + "variant": "accept" + }, + "serde_json": { + "us": 1498.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 2236.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1171.7, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1134.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1876.5, + "variant": "read (raw numbers)" + } + }, + "instruments": { + "Boost.JSON": { + "us": 218.3, + "variant": "SAX" + }, + "Glaze": { + "us": 265.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 357.3, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 301.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 107.2, + "variant": "accept" + }, + "serde_json": { + "us": 212.4, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 290.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 117.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 229.3, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 158.0, + "variant": "read" + } + }, + "marine_ik": { + "Boost.JSON": { + "us": 2936.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 4986.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 5353.3, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 7267.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 1883.9, + "variant": "accept" + }, + "serde_json": { + "us": 4072.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 6669.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 4193.5, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4661.1, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 4094.9, + "variant": "read (raw numbers)" + } + }, + "mesh": { + "Boost.JSON": { + "us": 954.5, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 1065.1, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1381.1, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 1867.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 399.6, + "variant": "accept" + }, + "serde_json": { + "us": 910.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 1691.7, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1103.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1221.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1059.7, + "variant": "read (raw numbers)" + } + }, + "mesh.pretty": { + "Boost.JSON": { + "us": 1046.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 1822.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1889.2, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 2329.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 967.1, + "variant": "accept" + }, + "serde_json": { + "us": 1483.7, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 2119.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1340.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1558.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1651.7, + "variant": "read (raw numbers)" + } + }, + "numbers": { + "Boost.JSON": { + "us": 81.6, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 146.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 238.2, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 275.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 63.0, + "variant": "accept" + }, + "serde_json": { + "us": 163.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 261.5, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 195.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 161.8, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 171.1, + "variant": "read (raw numbers)" + } + }, + "random": { + "Boost.JSON": { + "us": 896.6, + "variant": "SAX" + }, + "Glaze": { + "us": 743.7, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1079.9, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 1020.4, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 350.4, + "variant": "accept" + }, + "serde_json": { + "us": 772.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 840.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 398.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 502.9, + "variant": "Value" + }, + "yyjson": { + "us": 572.4, + "variant": "insitu (copy)" + } + }, + "repeat": { + "Boost.JSON": { + "us": 13.4, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 15.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 14.3, + "variant": "SAX (string stream)" + }, + "nlohmann json": { + "us": 13.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.1, + "variant": "accept" + }, + "serde_json": { + "us": 12.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 11.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 6.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 7.6, + "variant": "Value" + }, + "yyjson": { + "us": 8.3, + "variant": "read" + } + }, + "semanticscholar-corpus": { + "Boost.JSON": { + "us": 5631.3, + "variant": "SAX" + }, + "Glaze": { + "us": 8153.6, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 14768.7, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 6955.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 3095.4, + "variant": "accept" + }, + "serde_json": { + "us": 6204.0, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 9501.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 7535.9, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4777.5, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 6311.8, + "variant": "insitu (copy)" + } + }, + "tree-pretty": { + "Boost.JSON": { + "us": 35.4, + "variant": "SAX" + }, + "Glaze": { + "us": 48.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 62.8, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 48.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 16.9, + "variant": "accept" + }, + "serde_json": { + "us": 37.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 36.8, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 17.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 29.1, + "variant": "Value" + }, + "yyjson": { + "us": 21.4, + "variant": "insitu (copy)" + } + }, + "twitter_api_compact_response": { + "Boost.JSON": { + "us": 7.1, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 10.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 18.9, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 11.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 4.0, + "variant": "accept" + }, + "serde_json": { + "us": 7.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 11.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 5.7, + "variant": "DOM" + }, + "sonic-rs": { + "us": 6.7, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 5.8, + "variant": "insitu (copy)" + } + }, + "twitter_api_response": { + "Boost.JSON": { + "us": 11.0, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 16.6, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 26.9, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 16.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.5, + "variant": "accept" + }, + "serde_json": { + "us": 12.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 13.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 6.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 11.2, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 8.0, + "variant": "read" + } + }, + "twitter_timeline": { + "Boost.JSON": { + "us": 42.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 57.1, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 83.7, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 60.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 23.1, + "variant": "accept" + }, + "serde_json": { + "us": 45.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 54.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 29.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 43.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 28.9, + "variant": "read (raw numbers)" + } + }, + "twitterescaped": { + "Boost.JSON": { + "us": 669.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 753.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1109.2, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 908.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 306.8, + "variant": "accept" + }, + "serde_json": { + "us": 702.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 856.4, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 401.4, + "variant": "DOM" + }, + "sonic-rs": { + "us": 628.9, + "variant": "Value" + }, + "yyjson": { + "us": 474.3, + "variant": "read" + } + }, + "update-center": { + "Boost.JSON": { + "us": 366.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 719.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1010.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 580.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 256.4, + "variant": "accept" + }, + "serde_json": { + "us": 490.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 650.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 325.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 383.6, + "variant": "Value" + }, + "yyjson": { + "us": 459.2, + "variant": "read" + } + } + }, + "x86-gcc13": { + "apache_builds": { + "Boost.JSON": { + "us": 110.3, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 134.8, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 314.3, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 125.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 57.4, + "variant": "accept" + }, + "serde_json": { + "us": 105.1, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 135.6, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 62.4, + "variant": "DOM" + }, + "sonic-rs": { + "us": 88.3, + "variant": "Value" + }, + "yyjson": { + "us": 87.8, + "variant": "read" + } + }, + "github_events": { + "Boost.JSON": { + "us": 42.4, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 63.1, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 166.0, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 55.2, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 21.8, + "variant": "accept" + }, + "serde_json": { + "us": 49.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 55.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 27.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 40.9, + "variant": "Value" + }, + "yyjson": { + "us": 35.3, + "variant": "insitu (copy)" + } + }, + "google_maps_api_compact_response": { + "Boost.JSON": { + "us": 16.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 18.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 39.3, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 26.4, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 9.4, + "variant": "accept" + }, + "serde_json": { + "us": 16.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 23.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 13.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 13.8, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 11.3, + "variant": "read" + } + }, + "google_maps_api_response": { + "Boost.JSON": { + "us": 27.7, + "variant": "SAX" + }, + "Glaze": { + "us": 27.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 50.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 34.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 15.0, + "variant": "accept" + }, + "serde_json": { + "us": 27.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 30.6, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 14.7, + "variant": "DOM" + }, + "sonic-rs": { + "us": 23.2, + "variant": "Value" + }, + "yyjson": { + "us": 17.9, + "variant": "insitu (copy)" + } + }, + "gsoc-2018": { + "Boost.JSON": { + "us": 1107.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 1802.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 7484.8, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 1251.3, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 713.0, + "variant": "accept" + }, + "serde_json": { + "us": 1498.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 2236.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1174.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1134.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1848.0, + "variant": "read" + } + }, + "instruments": { + "Boost.JSON": { + "us": 228.5, + "variant": "SAX" + }, + "Glaze": { + "us": 211.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 492.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 286.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 115.2, + "variant": "accept" + }, + "serde_json": { + "us": 212.4, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 290.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 125.4, + "variant": "DOM" + }, + "sonic-rs": { + "us": 229.3, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 162.9, + "variant": "insitu (copy)" + } + }, + "marine_ik": { + "Boost.JSON": { + "us": 2904.2, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 3706.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 5805.4, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 6931.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 2131.0, + "variant": "accept" + }, + "serde_json": { + "us": 4072.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 6669.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 4381.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4661.1, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 4173.8, + "variant": "read (raw numbers)" + } + }, + "mesh": { + "Boost.JSON": { + "us": 992.3, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 718.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1460.7, + "variant": "SAX (string stream, default precision)" + }, + "nlohmann json": { + "us": 1875.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 433.4, + "variant": "accept" + }, + "serde_json": { + "us": 910.5, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 1691.7, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1171.5, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1221.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1120.2, + "variant": "read (raw numbers)" + } + }, + "mesh.pretty": { + "Boost.JSON": { + "us": 1061.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 1269.4, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1934.3, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 2283.0, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 939.0, + "variant": "accept" + }, + "serde_json": { + "us": 1483.7, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 2119.0, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 1379.5, + "variant": "DOM" + }, + "sonic-rs": { + "us": 1558.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 1728.8, + "variant": "read (raw numbers)" + } + }, + "numbers": { + "Boost.JSON": { + "us": 79.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 116.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 284.2, + "variant": "SAX (default precision)" + }, + "nlohmann json": { + "us": 270.5, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 67.1, + "variant": "accept" + }, + "serde_json": { + "us": 163.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 261.5, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 199.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 161.8, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 178.0, + "variant": "read (raw numbers)" + } + }, + "random": { + "Boost.JSON": { + "us": 960.8, + "variant": "SAX" + }, + "Glaze": { + "us": 667.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1453.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 979.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 363.7, + "variant": "accept" + }, + "serde_json": { + "us": 772.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 840.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 416.6, + "variant": "DOM" + }, + "sonic-rs": { + "us": 502.9, + "variant": "Value" + }, + "yyjson": { + "us": 568.1, + "variant": "insitu (copy)" + } + }, + "repeat": { + "Boost.JSON": { + "us": 14.4, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 11.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 17.8, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 11.1, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.7, + "variant": "accept" + }, + "serde_json": { + "us": 12.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 11.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 6.2, + "variant": "DOM" + }, + "sonic-rs": { + "us": 7.6, + "variant": "Value" + }, + "yyjson": { + "us": 9.2, + "variant": "read" + } + }, + "semanticscholar-corpus": { + "Boost.JSON": { + "us": 6232.4, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 7583.5, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 24043.7, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 7063.7, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 3214.2, + "variant": "accept" + }, + "serde_json": { + "us": 6204.0, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 9501.2, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 7505.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 4777.5, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 6346.4, + "variant": "insitu (copy)" + } + }, + "tree-pretty": { + "Boost.JSON": { + "us": 36.0, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 37.1, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 81.4, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 45.9, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 17.9, + "variant": "accept" + }, + "serde_json": { + "us": 37.3, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 36.8, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 19.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 29.1, + "variant": "Value" + }, + "yyjson": { + "us": 21.6, + "variant": "insitu (copy)" + } + }, + "twitter_api_compact_response": { + "Boost.JSON": { + "us": 7.9, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 9.5, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 29.5, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 11.6, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 4.1, + "variant": "accept" + }, + "serde_json": { + "us": 7.8, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 11.1, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 6.1, + "variant": "DOM" + }, + "sonic-rs": { + "us": 6.7, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 6.0, + "variant": "read" + } + }, + "twitter_api_response": { + "Boost.JSON": { + "us": 11.8, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 13.9, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 37.2, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 16.4, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 5.8, + "variant": "accept" + }, + "serde_json": { + "us": 12.2, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 13.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 7.0, + "variant": "DOM" + }, + "sonic-rs": { + "us": 11.2, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 7.8, + "variant": "insitu (copy)" + } + }, + "twitter_timeline": { + "Boost.JSON": { + "us": 46.1, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 49.0, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 125.4, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 61.3, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 23.6, + "variant": "accept" + }, + "serde_json": { + "us": 45.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 54.3, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 30.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 43.0, + "variant": "IgnoredAny" + }, + "yyjson": { + "us": 28.7, + "variant": "insitu (copy)" + } + }, + "twitterescaped": { + "Boost.JSON": { + "us": 689.9, + "variant": "SAX (numbers: none)" + }, + "Glaze": { + "us": 735.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1459.9, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 877.4, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 310.5, + "variant": "accept" + }, + "serde_json": { + "us": 702.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 856.4, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 442.8, + "variant": "DOM" + }, + "sonic-rs": { + "us": 628.9, + "variant": "Value" + }, + "yyjson": { + "us": 500.9, + "variant": "read" + } + }, + "update-center": { + "Boost.JSON": { + "us": 406.2, + "variant": "SAX" + }, + "Glaze": { + "us": 681.3, + "variant": "validate_json" + }, + "RapidJSON": { + "us": 1555.0, + "variant": "insitu (copy)" + }, + "nlohmann json": { + "us": 578.8, + "variant": "accept" + }, + "nlohmann json_document": { + "us": 261.3, + "variant": "accept" + }, + "serde_json": { + "us": 490.6, + "variant": "from_utf8 + IgnoredAny" + }, + "simd-json": { + "us": 650.9, + "variant": "tape (copy)" + }, + "simdjson": { + "us": 332.3, + "variant": "DOM" + }, + "sonic-rs": { + "us": 383.6, + "variant": "Value" + }, + "yyjson": { + "us": 461.4, + "variant": "read" + } + } + } +} \ No newline at end of file diff --git a/docs/mkdocs/scripts/figures/data/perf_suite.csv b/docs/mkdocs/scripts/figures/data/perf_suite.csv new file mode 100644 index 000000000..9ef488544 --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_suite.csv @@ -0,0 +1,183 @@ +benchmark,unit,3.12.0,3.13.0,speedup +Accept/canada,ns,1.29488e+07,2.3494e+06,5.512 +Accept/citm_catalog,ns,6.53091e+06,923408,7.073 +Accept/floats,ns,1.15702e+08,2.26771e+07,5.102 +Accept/jeopardy,ns,2.20758e+08,5.92935e+07,3.723 +Accept/signed_ints,ns,1.17358e+08,2.82947e+07,4.148 +Accept/small_signed_ints,ns,5.75113e+07,1.80352e+07,3.189 +Accept/twitter,ns,2.51345e+06,483792,5.195 +Accept/unsigned_ints,ns,1.16297e+08,2.97181e+07,3.913 +BinaryToCbor/1024,ns,298.444,107.095,2.787 +BinaryToCbor/128,ns,248.661,116.711,2.131 +BinaryToCbor/16,ns,244.687,49.6325,4.930 +BinaryToCbor/16384,ns,952.115,413.62,2.302 +BinaryToCbor/2048,ns,328.419,125.183,2.624 +BinaryToCbor/256,ns,264.678,90.8937,2.912 +BinaryToCbor/32,ns,251.632,50.4059,4.992 +BinaryToCbor/32768,ns,1541.05,802.721,1.920 +BinaryToCbor/4096,ns,406.957,177.412,2.294 +BinaryToCbor/512,ns,289.876,102.063,2.840 +BinaryToCbor/64,ns,254.928,84.6434,3.012 +BinaryToCbor/8,ns,247.618,49.3761,5.015 +BinaryToCbor/8192,ns,514.281,256.456,2.005 +Copy/canada,ns,3.78116e+06,2.92734e+06,1.292 +Copy/citm_catalog,ns,1.7026e+06,1.51108e+06,1.127 +Copy/twitter,ns,840201,767400,1.095 +CopyAssign/canada,ns,3.86416e+06,2.94449e+06,1.312 +CopyAssign/citm_catalog,ns,1.76529e+06,1.58608e+06,1.113 +CopyAssign/twitter,ns,884985,790724,1.119 +CopyOnly/canada,ns,1.60229e+06,1.57507e+06,1.017 +CopyOnly/citm_catalog,ns,786244,817481,0.962 +CopyOnly/twitter,ns,423631,420649,1.007 +CopyRing/canada,ns,3.86433e+06,2.99657e+06,1.290 +CopyRing/citm_catalog,ns,1.84434e+06,1.60579e+06,1.149 +CopyRing/twitter,ns,951510,818035,1.163 +DestroyOnly/canada,ns,2.22138e+06,1.40157e+06,1.585 +DestroyOnly/citm_catalog,ns,926244,711471,1.302 +DestroyOnly/twitter,ns,416055,336082,1.238 +Diff/canada,ns,3.98055e+07,3.80466e+06,10.462 +Diff/citm_catalog,ns,7.1859e+06,1.12351e+06,6.396 +Diff/twitter,ns,5.11261e+06,661062,7.734 +Dump/canada / -,ns,6.95189e+06,2.33647e+06,2.975 +Dump/canada / 4,ns,9.09882e+06,3.10291e+06,2.932 +Dump/citm_catalog / -,ns,1.42117e+06,295678,4.806 +Dump/citm_catalog / 4,ns,1.98589e+06,422600,4.699 +Dump/floats / -,ns,6.4332e+07,2.37747e+07,2.706 +Dump/floats / 4,ns,7.25695e+07,2.46207e+07,2.947 +Dump/jeopardy / -,ns,2.06771e+08,3.17494e+07,6.513 +Dump/jeopardy / 4,ns,2.27967e+08,3.53626e+07,6.447 +Dump/signed_ints / -,ns,2.40551e+07,1.0736e+07,2.241 +Dump/signed_ints / 4,ns,3.25192e+07,1.1333e+07,2.869 +Dump/small_signed_ints / -,ns,1.81398e+07,8.12457e+06,2.233 +Dump/small_signed_ints / 4,ns,2.55296e+07,8.80796e+06,2.898 +Dump/twitter / -,ns,1.43584e+06,214252,6.702 +Dump/twitter / 4,ns,1.63183e+06,253042,6.449 +Dump/unsigned_ints / -,ns,2.39512e+07,8.11916e+06,2.950 +Dump/unsigned_ints / 4,ns,3.22761e+07,8.58925e+06,3.758 +Equal/canada,ns,473767,349284,1.356 +Equal/citm_catalog,ns,279548,263329,1.062 +Equal/twitter,ns,145555,131450,1.107 +Flatten/canada,ns,2.94475e+07,1.11184e+07,2.649 +Flatten/citm_catalog,ns,6.7155e+06,3.07325e+06,2.185 +Flatten/twitter,ns,3.66077e+06,2.10599e+06,1.738 +FlattenOrdered/citm_catalog,ns,2.62026e+08,1.42645e+06,183.691 +FlattenOrdered/twitter,ns,5.1275e+07,890275,57.595 +FromBinaryBuffer/bjdata / canada,ns,8.81972e+06,4.16727e+06,2.116 +FromBinaryBuffer/bjdata / twitter,ns,3.32045e+06,976266,3.401 +FromBinaryBuffer/bjdata_optimized / canada,ns,9.2386e+06,2.47996e+06,3.725 +FromBinaryBuffer/bjdata_optimized / twitter,ns,3.30526e+06,985625,3.353 +FromBinaryBuffer/bson / canada,ns,1.00372e+07,4.31554e+06,2.326 +FromBinaryBuffer/bson / citm_catalog,ns,4.07611e+06,1.60647e+06,2.537 +FromBinaryBuffer/bson / twitter,ns,3.25635e+06,936933,3.476 +FromBinaryBuffer/cbor / canada,ns,8.89562e+06,2.11517e+06,4.206 +FromBinaryBuffer/cbor / citm_catalog,ns,3.94234e+06,1.45242e+06,2.714 +FromBinaryBuffer/cbor / floats,ns,3.0473e+07,5.47969e+06,5.561 +FromBinaryBuffer/cbor / jeopardy,ns,3.73185e+08,1.14934e+08,3.247 +FromBinaryBuffer/cbor / signed_ints,ns,3.66673e+07,9.88892e+06,3.708 +FromBinaryBuffer/cbor / twitter,ns,3.23196e+06,953415,3.390 +FromBinaryBuffer/msgpack / canada,ns,8.85983e+06,2.12215e+06,4.175 +FromBinaryBuffer/msgpack / citm_catalog,ns,3.84901e+06,1.4503e+06,2.654 +FromBinaryBuffer/msgpack / jeopardy,ns,3.73143e+08,1.11034e+08,3.361 +FromBinaryBuffer/msgpack / twitter,ns,3.2397e+06,954811,3.393 +FromBinaryBuffer/ubjson / canada,ns,8.84059e+06,4.20402e+06,2.103 +FromBinaryBuffer/ubjson / citm_catalog,ns,4.0708e+06,1.78566e+06,2.280 +FromBinaryBuffer/ubjson / jeopardy,ns,3.79093e+08,1.17024e+08,3.239 +FromBinaryBuffer/ubjson / twitter,ns,3.29948e+06,981057,3.363 +FromBinaryBuffer/ubjson_optimized / canada,ns,8.88909e+06,2.42788e+06,3.661 +FromBinaryBuffer/ubjson_optimized / twitter,ns,3.29784e+06,974810,3.383 +FromBinaryFile/bjdata / twitter,ns,1.09208e+07,1.94678e+06,5.610 +FromBinaryFile/bson / twitter,ns,1.07209e+07,1.84971e+06,5.796 +FromBinaryFile/cbor / canada,ns,1.49218e+07,4.48832e+06,3.325 +FromBinaryFile/cbor / twitter,ns,1.03718e+07,1.57388e+06,6.590 +FromBinaryFile/ubjson / canada,ns,1.43414e+07,6.42996e+06,2.230 +FromBinaryFile/ubjson / twitter,ns,1.09266e+07,1.97275e+06,5.539 +FromBinaryShape/containers / bjdata,ns,1.46977e+07,7.23447e+06,2.032 +FromBinaryShape/containers / bson,ns,1.75596e+07,7.88867e+06,2.226 +FromBinaryShape/containers / cbor,ns,1.46488e+07,4.15792e+06,3.523 +FromBinaryShape/containers / msgpack,ns,1.45853e+07,3.89266e+06,3.747 +FromBinaryShape/containers / ubjson,ns,1.49773e+07,7.23987e+06,2.069 +FromBinaryShape/containers / ubjson_optimized,ns,1.54989e+07,4.55976e+06,3.399 +FromBinaryShape/nested / bjdata,ns,96825.9,38335.1,2.526 +FromBinaryShape/nested / bson,ns,101356,42620.2,2.378 +FromBinaryShape/nested / cbor,ns,94929.8,35845.6,2.648 +FromBinaryShape/nested / msgpack,ns,92610.2,35078.3,2.640 +FromBinaryShape/nested / ubjson,ns,96090.6,38285.6,2.510 +FromBinaryShape/scalars / bjdata,ns,2.52616e+07,1.15856e+07,2.180 +FromBinaryShape/scalars / cbor,ns,2.62118e+07,5.88743e+06,4.452 +FromBinaryShape/scalars / msgpack,ns,2.50706e+07,5.65159e+06,4.436 +FromBinaryShape/scalars / ubjson,ns,2.53402e+07,1.16191e+07,2.181 +FromCborChunkedString/10000 chunks,ns,91845.9,82875.5,1.108 +FromMsgpack/canada,ns,1.48853e+07,4.56225e+06,3.263 +FromMsgpack/citm_catalog,ns,9.3559e+06,2.26246e+06,4.135 +FromMsgpack/floats,ns,6.12575e+07,2.86709e+07,2.137 +FromMsgpack/jeopardy,ns,1.16767e+09,1.90153e+08,6.141 +FromMsgpack/signed_ints,ns,6.38812e+07,3.28867e+07,1.942 +FromMsgpack/small_signed_ints,ns,6.44688e+07,3.44227e+07,1.873 +FromMsgpack/twitter,ns,1.02787e+07,1.48541e+06,6.920 +FromMsgpack/unsigned_ints,ns,5.7784e+07,2.83078e+07,2.041 +"GetArray>",ns,2274.63,654.431,3.476 +GetArray>,ns,8288.3,1175.75,7.049 +GetArray>,ns,60017.4,42504.9,1.412 +GetArray>,ns,6785.73,681.915,9.951 +GetMap/citm_catalog,ns,3.60313e+06,2.48546e+06,1.450 +GetVectorDouble/floats,ns,6.83612e+06,656162,10.418 +GetVectorInt/signed_ints,ns,8.22365e+06,3.46495e+06,2.373 +Iterate/canada,ns,897083,328035,2.735 +Iterate/citm_catalog,ns,305421,171245,1.784 +Iterate/twitter,ns,89996.6,61975.8,1.452 +JsonPointerAt/citm_catalog,ns,1.89898e+06,1.17751e+06,1.613 +JsonPointerAt/twitter,ns,817946,611519,1.338 +JsonPointerContains/citm_catalog,ns,2.8177e+06,1.26796e+06,2.222 +JsonPointerContains/twitter,ns,1.33508e+06,628630,2.124 +JsonPointerParse/citm_catalog,ns,5.81355e+06,2.24831e+06,2.586 +JsonPointerParse/twitter,ns,2.47971e+06,1.02159e+06,2.427 +JsonPointerToString/citm_catalog,ns,6.7858e+06,1.93924e+06,3.499 +JsonPointerToString/twitter,ns,2.23096e+06,834416,2.674 +ParseFILE/canada,ns,5.41907e+07,1.46942e+07,3.688 +ParseFILE/citm_catalog,ns,3.59542e+07,7.58092e+06,4.743 +ParseFILE/twitter,ns,1.4087e+07,3.44991e+06,4.083 +ParseFile/canada,ns,1.82792e+07,6.46954e+06,2.825 +ParseFile/citm_catalog,ns,8.12979e+06,2.52336e+06,3.222 +ParseFile/floats,ns,1.31229e+08,4.81407e+07,2.726 +ParseFile/jeopardy,ns,3.38017e+08,1.62098e+08,2.085 +ParseFile/signed_ints,ns,1.28749e+08,4.62304e+07,2.785 +ParseFile/small_signed_ints,ns,6.47398e+07,3.34103e+07,1.938 +ParseFile/twitter,ns,3.43041e+06,1.37495e+06,2.495 +ParseFile/unsigned_ints,ns,1.24001e+08,4.74365e+07,2.614 +ParseIndented/canada / 4,ns,3.4977e+07,5.37149e+06,6.512 +ParseIndented/citm_catalog / 4,ns,7.52423e+06,1.81376e+06,4.148 +ParseIndented/jeopardy / 4,ns,3.45046e+08,1.33383e+08,2.587 +ParseIndented/twitter / 4,ns,3.72283e+06,1.12645e+06,3.305 +ParseStreamValues/ndjson,ns,7.15876e+06,3.76965e+06,1.899 +ParseStreamValues/numbers,ns,1.92619e+06,383138,5.027 +ParseString/canada,ns,1.55213e+07,4.62776e+06,3.354 +ParseString/citm_catalog,ns,7.56417e+06,1.77967e+06,4.250 +ParseString/floats,ns,1.21779e+08,2.83035e+07,4.303 +ParseString/jeopardy,ns,3.16817e+08,1.30897e+08,2.420 +ParseString/signed_ints,ns,1.22931e+08,3.19852e+07,3.843 +ParseString/small_signed_ints,ns,6.2685e+07,2.49764e+07,2.510 +ParseString/twitter,ns,3.2961e+06,1.04867e+06,3.143 +ParseString/unsigned_ints,ns,1.21229e+08,3.29241e+07,3.682 +ParseStringOrdered/canada,ns,1.5388e+07,4.5275e+06,3.399 +ParseStringOrdered/citm_catalog,ns,1.15204e+07,1.68115e+06,6.853 +ParseStringOrdered/jeopardy,ns,3.73533e+08,1.13397e+08,3.294 +ParseStringOrdered/twitter,ns,4.5979e+06,948606,4.847 +Patch/canada,ns,1.03684e+07,3.47719e+06,2.982 +Patch/citm_catalog,ns,2.74522e+06,1.74191e+06,1.576 +Patch/twitter,ns,1.57928e+06,888657,1.777 +SaxParse/canada,ns,1.31023e+07,3.26697e+06,4.011 +SaxParse/citm_catalog,ns,6.54642e+06,966806,6.771 +SaxParse/twitter,ns,2.53102e+06,483052,5.240 +ToCbor/canada,ns,1.41339e+06,556912,2.538 +ToCbor/citm_catalog,ns,1.04743e+06,259178,4.041 +ToCbor/floats,ns,9.04677e+06,1.90094e+06,4.759 +ToCbor/jeopardy,ns,7.39339e+07,2.20678e+07,3.350 +ToCbor/signed_ints,ns,1.15333e+07,2.827e+06,4.080 +ToCbor/small_signed_ints,ns,1.0394e+07,2.47974e+06,4.192 +ToCbor/twitter,ns,658566,143397,4.593 +ToCbor/unsigned_ints,ns,8.17966e+06,2.81588e+06,2.905 +ToJsonStrings/copy,ns,6.12e+06,5.65303e+06,1.083 +ToJsonStrings/move,ns,6.13061e+06,3.13303e+06,1.957 +Unflatten/canada,ns,4.25276e+07,1.10995e+07,3.831 +Unflatten/citm_catalog,ns,1.01866e+07,3.62185e+06,2.813 +Unflatten/twitter,ns,4.74536e+06,2.21103e+06,2.146 diff --git a/docs/mkdocs/scripts/figures/data/perf_timeline.csv b/docs/mkdocs/scripts/figures/data/perf_timeline.csv new file mode 100644 index 000000000..36506c26f --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_timeline.csv @@ -0,0 +1,354 @@ +index,commit,date,pr,subject,parse_twitter,parse_citm,parse_canada,parse_citm_compact,parse_twitter_ifstream,accept_twitter,dump_twitter,dump_citm,dump_canada,dump4_citm,from_cbor_twitter,to_cbor_twitter,copy_destroy_citm,equal_citm,view_parse_twitter,view_parse_citm,view_parse_canada +0,55f93686c0,2025-04-11,,Merge branch 'release/3.12.0',3571.487,8219.609,17049.073,4366.792,3846.006,2394.213,1441.213,1375.446,7510.989,1917.809,3463.281,695.524,1643.327,1956.891,,, +1,1705bfe914,2025-04-11,4727,:bookmark: set version to 3.12.0 (#4727),3589.331,8245.422,17079.250,4422.711,3894.787,2397.597,1440.546,1377.745,7514.698,1922.371,3498.997,695.559,1655.240,1967.301,,, +2,4cca3b9cb2,2025-04-13,4738,Fix warning and add emscripten CI step (#4738),3559.657,8195.105,17066.291,4373.011,3794.269,2388.900,1419.182,1355.724,7420.703,1912.038,3468.667,664.214,1631.610,1939.475,,, +3,96c1b52f1c,2025-04-15,4742,Fix conversion to std::optional (#4742),3573.838,8157.276,16993.208,4383.656,3858.927,2395.092,1438.169,1372.208,7497.776,1925.481,3482.185,667.895,1633.619,1946.687,,, +4,88c92e605c,2025-04-16,4744,Fix compilation failure and warnings with NVHPC (#4744),3563.149,8039.911,16922.739,4381.927,3768.560,2385.086,1407.564,1345.578,7370.063,1897.474,3462.010,662.955,1623.286,1925.804,,, +5,c67d538274,2025-04-17,4749,Fix C4702 warning and extend MSVC CI job (#4749),3585.422,8251.057,17050.448,4400.542,3896.586,2390.655,1440.391,1371.722,7453.474,1921.277,3478.523,667.911,1636.206,1939.531,,, +6,756ca22ec5,2025-04-23,4736,Provide fallback for missing `char8_t` support (#4736),3559.146,8139.703,17085.114,4387.658,3856.745,2392.849,1424.997,1370.599,7477.537,1907.661,3484.427,665.541,1634.156,1957.401,,, +7,6b9199382b,2025-04-27,4763,Add missing header (#4763),3541.323,8077.761,17011.636,4359.183,3842.380,2396.686,1421.116,1363.737,7431.375,1902.909,3474.250,664.442,1625.644,1934.732,,, +8,3b02afb9d9,2025-04-28,4760,Specialize char_traits for std::byte to fix from_msgpack (fixes #4756) (#4760),3583.070,8198.146,17134.698,4381.743,3899.872,2409.185,1440.233,1380.810,7504.838,1921.781,3500.125,666.078,1657.207,1966.036,,, +9,eef76c200e,2025-04-28,4764,Make library work with C++20 modules (#4764),3528.529,8080.458,16936.656,4330.570,3764.287,2363.848,1407.851,1358.079,7356.239,1897.423,3455.287,665.194,1632.255,1937.675,,, +10,dff2b4756c,2025-04-29,4765,fix: BJData size calculation overflow (#4765),3553.706,8141.375,17047.511,4360.144,3797.070,2389.756,1417.737,1364.718,7454.313,1921.962,3479.878,666.456,1644.760,1944.696,,, +11,9110918cf8,2025-05-04,4748,Fix typos (#4748),3563.682,8176.427,17239.354,4398.055,3891.669,2399.782,1441.669,1387.133,7516.073,1925.323,3483.271,669.348,1647.760,1957.747,,, +12,46e7cd3dc2,2025-05-16,4775,Replace deprecated std::is_trivial in C++26 (#4775),3565.242,8195.396,17135.646,4373.479,3851.604,2392.258,1418.425,1370.958,7464.854,1909.844,3485.046,665.606,1643.155,1952.329,,, +13,828c891427,2025-05-16,4786,Extend type_name() to invalid type (#4786),3549.573,8103.761,17066.198,4359.911,3804.849,2389.121,1428.584,1366.405,7424.838,1914.434,3452.497,667.452,1632.750,1928.324,,, +14,4b17f90f65,2025-05-22,4609,Add `ignore_trailing_commas` option (#4609),3544.662,8132.052,16997.375,4344.592,3825.765,2382.755,1408.435,1367.468,7460.448,1924.522,3434.062,733.089,1631.356,1891.572,,, +15,b19f058465,2025-06-01,4802,Encode infinity and NaN as float for MsgPack and CBOR (#4802),3550.020,8126.438,17350.885,4327.596,3825.419,2389.356,1409.422,1376.649,7363.802,1921.226,3441.081,683.190,1624.144,1886.388,,, +16,cf16c5ab9f,2025-06-02,4805,Use binary_t::value_type (#4805),3551.735,8143.521,17153.291,4309.477,3829.229,2387.640,1428.550,1385.585,7415.271,1932.347,3425.838,657.735,1631.586,1888.954,,, +17,d70e46bc65,2025-06-25,4830,:bug: add missing header to input_adapters.hpp (#4830),3546.448,8157.469,17062.364,4335.300,3805.221,2382.796,1422.863,1382.581,7411.401,1928.676,3433.190,691.842,1632.972,1892.453,,, +18,30d27df61c,2025-07-31,4871,Fix CI (#4871),3570.015,8150.859,17070.625,4330.078,3806.505,2400.329,1434.947,1381.065,7425.718,1931.556,3429.632,656.545,1633.515,1892.916,,, +19,efcf9efb4f,2025-08-02,4873,Fixes #4854 Explicitly handle nullptr in sax_parse (#4873),3520.381,8050.719,16883.042,4331.820,3861.906,2368.069,1408.435,1375.954,7363.651,1898.466,3432.992,653.988,1634.141,1894.948,,, +20,4106af8d92,2025-08-20,4896,":rotating_light: suppress cppcoreguidelines-c-copy-assignment-signature,misc-unconventional-assign-operator (#4896)",3540.599,8175.265,17010.438,4345.182,3866.833,2393.935,1435.100,1389.496,7453.724,1945.791,3433.169,657.446,1638.434,1900.360,,, +21,a63795caf1,2025-10-22,4791,:rotating_light: avoid deprecation warning (#4791),3550.057,8174.646,16983.177,4363.521,3888.336,2393.305,1423.434,1376.334,7469.407,1936.013,3447.279,666.706,1645.354,1903.707,,, +22,1cc56b2dcd,2025-10-23,4957,Address CWG issue 2521 (#4957),3557.396,8119.651,17072.730,4351.881,3834.739,2386.097,1442.100,1393.245,7474.463,1932.315,3446.883,660.187,1638.983,1896.000,,, +23,54be9b04f0,2025-10-23,4960,:page_facing_up: update REUSE (#4960),3554.625,8098.287,17115.219,4324.578,3809.950,2390.791,1424.488,1376.715,7422.828,1913.208,3424.693,659.030,1623.405,1892.756,,, +24,29913ca760,2025-10-25,4963,Add char8_t* overload for _json and _json_pointer (#4963),3544.899,8169.203,17007.844,4353.594,3797.630,2392.108,1423.032,1375.216,7349.787,1909.897,3428.771,655.625,1635.273,1891.018,,, +25,515d994acb,2026-01-01,5044,:page_facing_up: adjust year (#5044),3524.610,8059.521,16949.416,4313.508,3773.750,2364.742,1410.427,1372.988,7382.438,1915.502,3403.159,643.968,1618.972,1884.213,,, +26,8f75700141,2026-01-11,4958,support types convertible to string_view as JSON keys (#4958),3546.757,8142.599,17103.386,4327.739,3825.990,2388.540,1420.515,1379.309,7413.062,1924.540,3433.677,658.266,1628.079,1890.759,,, +27,457bc283ff,2026-01-12,5039,fix(cbor): reject overflowing negative integers (#5039),3508.883,8077.291,16930.011,4305.982,3785.698,2378.693,1425.526,1366.111,7407.042,1929.142,3478.909,657.722,1636.304,1944.681,,, +28,e3014f162a,2026-01-13,5052,Fix conversion to std::optional (#5052),3547.995,8140.052,17010.031,4321.914,3797.807,2385.856,1430.414,1386.202,7407.260,1930.403,3462.213,657.829,1629.579,1932.066,,, +29,5ed07097fa,2026-01-13,5050,Fix -Wtautological-constant-out-of-range-compare in serializer (#5050),3544.136,8180.208,17033.209,4339.591,3799.779,2391.940,1427.870,1387.871,7368.765,1922.321,3454.938,659.367,1630.707,1959.722,,, +30,25f48639c7,2026-01-23,5016,Reference tuple from json (#5016),3563.180,8209.037,17030.969,4388.675,3895.086,2392.088,1430.666,1393.853,7528.567,1934.347,3481.351,677.234,1645.418,1957.591,,, +31,f8eee1bb79,2026-02-07,5071,Annotate unreachable comment-scanner switch paths to satisfy C26819 (#5071),3508.000,8128.750,16958.959,4315.235,3797.237,2371.963,1425.146,1374.867,7453.381,1930.211,3456.508,658.568,1629.188,1909.736,,, +32,fd17b0889e,2026-05-08,5139,Remove nullptr safety check from sax_parse functions (#5139),3544.101,8033.021,16963.292,4334.102,3800.736,2382.583,1419.050,1361.745,7357.073,1907.153,3429.315,657.041,1618.815,1937.829,,, +33,62f3b41b30,2026-05-08,5090,fix: treat single-element brace-init as copy/move instead of wrapping in array (#5074) (#5090),3550.323,8168.713,17060.031,4349.417,3794.110,2380.583,1416.822,1361.182,7369.651,1897.717,3466.731,659.297,1631.463,1941.905,,, +34,4fad446897,2026-05-10,5162,docs: add IDs to @requirement tags to fix Doxygen autolinking (#5162),3545.440,8031.891,17069.448,4324.698,3802.862,2383.513,1422.768,1384.602,7325.776,1917.606,3469.787,659.011,1631.296,1940.370,,, +35,a0a4e7cc0b,2026-05-13,5152,Add front methods to json_pointers (implements #4889) (#5152),3582.898,8215.010,17034.448,4345.515,3891.513,2396.572,1432.733,1395.714,7554.119,1934.008,3484.859,659.298,1642.314,1957.356,,, +36,93e49decbd,2026-05-14,5167,Fix incomplete-type error in set_parents with ordered_json (#5167),3555.224,8147.771,17017.073,4320.846,3831.318,2386.750,1435.840,1385.578,7436.864,1927.483,3466.508,658.409,1632.724,1939.528,,, +37,7192763f15,2026-05-14,5163,Fix compile error when using nlohmann ordered_map with WITH_DEFAULT macros (#5163),3520.675,8039.145,16892.291,4303.448,3769.198,2363.337,1410.030,1364.679,7380.797,1913.285,3437.278,660.130,1630.738,1943.235,,, +38,5a05627b1f,2026-05-14,5169,:rotating_light: fix warning (#5169),3600.555,8160.854,16979.031,4324.070,3887.823,2389.157,1430.983,1387.106,7509.984,1912.601,3473.713,663.279,1652.982,1958.774,,, +39,bb5404bb86,2026-05-15,5164,Fix GCC C++20 modules compilation #5103 (#5164),3543.823,8120.266,17015.395,4349.300,3794.880,2364.178,1414.408,1374.548,7484.218,1920.495,3444.266,699.326,1626.241,1954.688,,, +40,b1bb9fce0c,2026-05-15,3929,Fix for printing long doubles bug in dump_float (#3929),3549.378,8089.891,16934.927,4313.310,3824.802,2386.958,1412.164,1385.425,7417.869,1930.513,3461.151,651.557,1618.735,1944.450,,, +41,cba5dc0ed8,2026-05-16,4563,New macros for the named JSON convertor generation (#4563),3544.657,8168.182,16990.886,4327.688,3806.963,2370.975,1421.629,1390.206,7454.151,1919.284,3452.456,677.413,1623.622,1941.921,,, +42,47202c804a,2026-05-18,5171,Add missing overload to ordered_map::find (#5171),3527.542,8168.312,17141.989,4409.456,3887.378,2397.007,1428.765,1387.033,7495.604,1935.710,3485.088,660.155,1648.977,1951.430,,, +43,58cfecf7f7,2026-05-18,5151,Serialize enum (#5151),3521.302,8100.104,16805.489,4288.463,3763.971,2381.494,1408.713,1383.059,7328.261,1915.202,3440.372,648.726,1617.661,1922.608,,, +44,584e6b1cfb,2026-05-22,5187,Fix: update() parent pointers not updated after recursive merge with JSON_DIAGNOSTICS (#5187),3550.639,8083.463,17055.198,4326.833,3804.257,2381.519,1432.039,1381.986,7377.844,1915.159,3460.750,656.873,1631.527,1940.953,,, +45,02dfbea39d,2026-06-17,5209,added explicit instantiations of 'has_from_json' and 'has_to_json' for std_fs::path (#5209),3552.209,8215.474,17167.760,4338.404,3845.144,2398.026,1425.012,1387.629,7458.614,1931.388,3475.343,658.183,1644.329,1958.324,,, +46,fc1df0b7db,2026-06-23,5172,:recycle: remove unnecessary if (#5172),3562.088,8175.531,17044.042,4336.583,3863.651,2404.695,1425.872,1389.434,7523.855,1914.128,3481.000,653.259,1639.515,1957.649,,, +47,c5b2b26fdc,2026-06-29,5217,:memo: fix docs (#5217),3526.825,8052.307,17000.011,4343.963,3793.412,2388.194,1416.706,1374.177,7361.646,1904.008,3463.919,658.322,1627.765,1921.887,,, +48,b7566c6293,2026-06-30,5161,Harden JSON_HAS_RANGES detection for incomplete C++20 ranges implementations (#5161),3538.995,8071.787,17120.751,4318.797,3772.445,2384.008,1421.440,1385.239,7419.292,1898.929,3431.466,647.948,1602.258,1928.644,,, +49,adf78d3a76,2026-06-30,5215,Minor: unique_ptr template resolution workaround for MSVC (#5215),3550.380,8138.026,17036.802,4366.062,3842.430,2389.536,1426.658,1385.609,7428.787,1915.233,3467.188,658.332,1636.158,1942.556,,, +50,272411c5e6,2026-06-30,5218,Overwork project infrastructure (#5218),3547.487,8087.250,16962.198,4341.969,3793.831,2387.509,1420.888,1381.072,7450.078,1930.003,3466.193,659.676,1631.329,1943.043,,, +51,730b57775d,2026-07-01,5222,:bug: avoid assertion in patch (#5222),3539.912,8169.771,17027.229,4345.151,3790.753,2376.552,1421.263,1386.717,7399.985,1923.237,3455.722,653.609,1630.914,1934.028,,, +52,ca49ab6123,2026-07-02,5223,Extend value to arrays when using JSON pointers (#5223),3550.341,8113.787,16951.313,4346.805,3793.097,2391.224,1409.695,1380.075,7374.073,1926.401,3458.438,659.382,1629.387,1941.306,,, +53,8d7e0046f4,2026-07-02,5224,Add std::format and fmt support (#5224),3546.935,8170.406,16968.927,4346.906,3814.956,2387.612,1424.861,1386.542,7350.765,1900.376,3461.177,662.476,1633.858,1930.434,,, +54,31dd15b258,2026-07-02,5221,Fix ambiguous static_cast (#5221),3551.945,8213.000,17131.271,4373.620,3845.763,2393.074,1438.633,1385.769,7471.146,1927.804,3486.568,662.015,1631.810,1958.901,,, +55,eed1587000,2026-07-05,5234,Reconstruct lexer diagnostics lazily for seekable input (#120) (#5234),3145.909,5311.094,15381.843,4292.961,3851.260,1966.833,1422.598,1365.461,7443.276,1920.467,3467.060,702.832,1637.587,1905.758,,, +56,83c87cb9e0,2026-07-05,5233,Read binary strings/blobs in bulk chunks with a memcpy fast path (#5233),3141.867,5259.485,15454.959,4326.664,3797.198,1987.623,1406.492,1372.765,7424.729,1899.726,2363.895,667.502,1630.097,1888.392,,, +57,acf076a677,2026-07-06,5238,Fix ADL leak of nlohmann::detail through basic_json's default base class (#5238),3152.153,5277.073,15291.407,4338.828,3839.331,1995.524,1429.960,1365.917,7456.776,1907.928,2398.016,670.257,1627.590,1897.997,,, +58,c05c5e229b,2026-07-07,5241,Add missing copyright notices to SBOM (#5241),3147.485,5268.865,15319.584,4321.823,3796.972,1981.167,1432.689,1371.264,7465.416,1918.083,2388.154,667.119,1630.745,1891.583,,, +59,366f3d26e5,2026-07-08,5235,Replace snprintf with a branch-free writer for \uXXXX escapes (#5235),3127.641,5272.302,15425.239,4340.459,3850.357,1997.957,1459.603,1356.461,7509.703,1899.916,2366.966,668.383,1624.981,1889.145,,, +60,f8e99e856c,2026-07-09,5248,Fix nvcc CUDA 12.0/12.1 C++20 ranges parse error (#3907) (#5248),3132.099,5226.375,15164.510,4301.901,3769.651,1967.647,1456.759,1365.810,7530.724,1908.635,2381.610,683.815,1616.699,1879.795,,, +61,855f511db4,2026-07-09,5250,Fix stale Clang -Weverything suppression comments; drop -Wno-missing-noreturn (#5250),3126.792,5208.338,15352.520,4293.596,3800.544,1969.497,1458.601,1329.851,7372.849,1876.404,2368.894,662.173,1603.881,1874.673,,, +62,d0a43141ea,2026-07-09,5253,Fix #3868: Remove operator!= to enable P2468R2 rewritten candidate synthesis (#5253),3165.182,5270.458,15479.031,4302.729,3845.646,1989.231,1474.135,1343.312,7443.282,1887.909,2392.523,670.395,1634.871,1894.474,,, +63,b630f5e9c7,2026-07-10,5260,Fix container input_adapter SFINAE for lvalue-only ADL begin/end (#5260),3128.117,5263.807,15375.677,4330.544,3819.953,1982.196,1454.088,1339.062,7364.683,1877.699,2361.482,666.486,1616.514,1920.626,,, +64,c60217e801,2026-07-11,5205,fix: support constructing json from C++20 range views (#4916) (#5205),3117.539,5206.552,15308.166,4320.513,3798.713,1983.458,1447.072,1350.950,7357.213,1875.632,2340.731,662.905,1633.357,1934.261,,, +65,fe2bcc080f,2026-07-11,5266,Custom BinaryType direct assignment (#5266),3174.528,5284.562,15383.645,4328.120,3895.086,1996.913,1478.427,1355.569,7512.115,1899.236,2398.490,672.118,1642.910,1967.660,,, +66,ca76c37650,2026-07-11,5265,Add iterator+sentinel tests and docs for binary deserializers (#5265),3134.265,5218.021,15352.521,4306.284,3791.612,1967.824,1451.953,1358.685,7508.828,1891.697,2377.848,665.474,1631.495,1934.907,,, +67,c197feff81,2026-07-12,5268,Extend memcpy fast path to sized sentinels (e.g. std::counted_iterator) (#5268),3116.271,5207.146,15415.771,4272.443,3815.851,1984.966,1451.103,1341.093,7328.037,1865.385,2383.169,664.494,1617.967,1915.428,,, +68,1c5a953de5,2026-07-19,5276,reject unpaired UTF-16 surrogates in wide-string input (#5276),3155.360,5299.631,15419.812,4302.089,3853.104,1987.259,1468.653,1349.665,7549.432,1911.365,2457.555,680.311,1653.282,1955.673,,, +69,3565f40229,2026-07-20,5284,reject negative UBJSON/BJData string length (#5284),3170.456,5301.698,15404.416,4351.226,3893.594,1997.034,1470.907,1358.245,7491.480,1909.601,2401.384,671.260,1639.865,1963.899,,, +70,9a3ebb9456,2026-07-23,5287,validate BSON document size against the bytes read (#5287),3157.646,5264.062,15305.271,4338.672,3839.643,1987.196,1461.356,1351.630,7444.791,1890.626,2398.503,665.262,1655.798,1930.268,,, +71,8ec98e2c9e,2026-07-27,5313,adding cleanups to bson writer (#5313),3150.448,5268.948,15445.927,4308.612,3805.005,1989.643,1466.348,1349.591,7326.453,1895.842,2393.278,708.164,1644.025,1946.652,,, +72,2e23687092,2026-07-28,5314,to_bson() silently emits corrupt documents when a length exceeds INT32_MAX (#5314),3146.534,5254.547,15445.250,4304.008,3798.620,1986.260,1459.735,1345.534,7517.651,1903.996,2395.155,674.344,1644.565,1952.682,,, +73,868506dcc0,2026-07-30,5335,Fix CBOR half-float assertion bounds (#5335),3167.086,5267.068,15397.979,4351.011,3883.135,2003.345,1468.939,1360.483,7455.230,1909.055,2406.305,679.942,1643.646,1945.639,,, +74,dd24e2dffd,2026-07-30,5332,check all BSON reads and add an EOF check for booleans (#5332),3138.315,5284.833,15399.166,4310.513,3847.630,1980.682,1464.104,1344.108,7445.146,1901.512,2400.532,670.850,1635.196,1900.946,,, +75,fd72ecfc8c,2026-07-31,5301,validate ndarray element types in write_bjdata_ndarray (#5301),3164.662,5262.141,15399.010,4287.271,3849.318,1988.186,1460.688,1353.767,7458.380,1893.669,2398.485,668.466,1644.018,1921.615,,, +76,bc48951128,2026-07-31,5323,Fix UBJSON high-precision floating-point overflow handling (#5323),3155.628,5289.864,15474.375,4324.253,3888.966,2015.068,1477.846,1354.622,7480.730,1905.566,2415.428,668.997,1641.776,1911.819,,, +77,d94cbd99dc,2026-07-31,5274,reject CBOR array/map length equal to the indefinite-length marker (#5274),3144.041,5272.193,15466.980,4338.735,3848.849,1999.231,1459.129,1358.119,7507.307,1901.807,2394.972,667.016,1635.960,1899.878,,, +78,2222d386c9,2026-07-31,5339,fix: check CBOR tagged subtype reads (#5339),3095.768,5137.792,15064.146,4258.977,3755.229,1965.900,1454.890,1338.066,7399.068,1883.624,2358.193,660.190,1618.172,1939.713,,, +79,585929bff9,2026-08-03,5289,Fix Clang deprecation warning for json_pointer operator== with ordered_json (#5289),3142.341,5259.360,15258.271,4275.479,3807.672,1969.704,1453.688,1337.633,7451.037,1879.447,2364.966,661.560,1635.617,1945.709,,, +80,5f121d8c50,2026-08-03,5336,avoid sign extension in char_traits::to_int_type (#5336),3145.000,5264.880,15441.521,4269.632,3796.781,1983.497,1440.810,1325.232,7427.750,1880.047,2361.899,663.772,1621.595,1912.378,,, +81,68f0722a19,2026-08-03,5342,remove discarded array from parent object in end_array (#5342),3161.273,5269.907,15312.469,4335.433,3840.510,1995.965,1465.745,1355.934,7474.901,1895.483,2401.197,657.397,1634.791,1901.902,,, +82,dca9d49a33,2026-08-05,5348,reject out-of-range code points in UTF-32 wide-string input (#5348),3119.753,5210.979,15209.260,4273.984,3799.034,1995.297,1459.456,1342.982,7431.646,1891.478,2370.364,653.618,1633.585,1882.753,,, +83,9a091d2b82,2026-08-05,5362,Do not write BJData ndarrays whose size overflows std::size_t (#5362),3137.381,5257.312,15286.084,4308.500,3805.325,1995.140,1468.138,1354.729,7510.088,1893.036,2384.577,659.394,1628.260,1890.245,,, +84,d5647e6a3b,2026-08-05,5355,Resolve the TODO(niels) in get_ubjson_string (#5355),3121.278,5249.927,15246.011,4292.737,3800.490,1967.087,1443.762,1333.226,7368.953,1862.131,2347.852,644.647,1623.909,1889.958,,, +85,bacdabd176,2026-08-05,5361,Fix start_pos() for strings containing escape sequences (#5361),3114.653,5251.619,15253.907,4331.818,3786.156,1960.676,1442.388,1330.247,7354.724,1863.306,2351.588,650.781,1623.543,1886.671,,, +86,1c136a66c4,2026-08-06,5363,Move the CBOR doc block to the function it describes (#5363),3124.274,5209.615,15411.897,4293.320,3812.156,1982.854,1457.653,1345.680,7422.343,1884.848,2387.050,656.076,1627.620,1878.737,,, +87,6285225fd0,2026-08-12,5211,Fix integer comparison bug (#5211),3159.557,5291.323,15395.395,4329.836,3867.200,1989.476,1456.052,1359.795,7526.860,1879.642,2396.137,659.077,1638.176,1900.416,,, +88,b5378e8deb,2026-08-19,5331,Fix CBOR tag handlers not recognizing tags 0-5 and 21-23 (#5331),3172.476,5239.812,15479.917,4295.539,3871.289,2003.439,1473.447,1343.742,7516.875,1888.412,2400.572,645.588,1641.621,1886.531,,, +89,2f025f401e,2026-08-25,5380,Throw other_error.502 when UBJSON use_type is set without use_size (#5380),3155.873,5190.312,15144.406,4286.388,3793.805,1968.199,1442.240,1340.929,7373.610,1860.543,2370.570,648.906,1631.207,1893.750,,, +90,35705d79d8,2026-08-28,5414,Fix update(merge_objects=true) throwing on primitive-to-object merge (#5414),3169.029,5252.578,15387.292,4340.690,3893.646,1979.616,1472.286,1361.543,7491.302,1903.909,2401.404,659.396,1641.697,1912.409,,, +91,137a40b9aa,2026-09-05,5459,Compare integers with floats exactly instead of widening the integer (#5459),3134.229,5259.349,15404.541,4300.146,3846.646,1992.155,1467.919,1351.774,7467.146,1887.255,2391.467,660.347,1631.735,1891.751,,, +92,3c875683a5,2026-09-05,5461,Make diff() linear when an array shrinks (#5461),3141.068,5259.000,15271.166,4319.659,3797.088,1983.450,1455.354,1354.676,7444.860,1891.687,2389.333,657.163,1632.998,1887.016,,, +93,09b6b6b5ba,2026-09-05,5455,Fix to_bjdata() emitting unparsable output when _ArraySize_ is not an array (#5455),3161.542,5253.047,15311.718,4291.388,3834.264,1992.744,1472.685,1357.680,7409.479,1889.287,2389.501,698.680,1628.237,1888.705,,, +94,faa35cc647,2026-09-09,5484,Skip integer conversion in accept()/SAX validation when the value is unused (#5484),3103.654,5222.453,15458.573,4215.765,3804.320,1935.161,1468.660,1353.499,7452.052,1883.191,2383.524,654.441,1631.700,1885.664,,, +95,6d86cc0f6b,2026-09-09,5490,Speed up whitespace skipping in the lexer (#5490),3181.328,5276.318,15307.312,4262.771,3877.401,1977.062,1465.196,1356.119,7594.177,1906.814,2388.615,684.926,1636.950,1893.526,,, +96,c05347dd54,2026-09-09,5475,Undefine the four JSON_HEDLEY_* macros that leak after including json.hpp (#5475),3147.932,5156.625,15347.990,4217.505,3871.812,1982.807,1458.787,1354.934,7639.328,1879.823,2370.342,674.625,1637.257,1903.903,,, +97,d6660cf718,2026-09-09,5485,Route hand-rolled diagnostic pragmas through Hedley (#5485),3116.151,5215.531,15257.499,4189.979,3835.023,1974.111,1459.363,1342.996,7553.802,1887.698,2379.999,669.934,1635.350,1877.492,,, +98,c9477ccf91,2026-09-09,5496,Throw when JSON Patch remove's target path resolves through a primitive or null parent (#5496),3138.841,5258.401,15315.417,4201.008,3874.682,1967.630,1446.393,1335.060,7542.708,1870.111,2390.141,668.484,1634.138,1886.981,,, +99,8c38e270b5,2026-09-09,5497,Reject JSON Patch move when from is a proper prefix of path (#5497),3183.820,5280.000,15346.969,4222.164,3839.596,1970.753,1470.428,1351.838,7515.344,1895.809,2389.731,673.696,1633.247,1889.546,,, +100,a316738cfa,2026-09-09,5471,Add JSON_HEDLEY_WARN_UNUSED_RESULT to the current accept() overloads (#5471),3175.891,5281.302,15397.062,4240.576,3934.333,1981.765,1475.890,1353.387,7625.104,1896.181,2401.097,669.729,1646.133,1895.638,,, +101,c9f1d2d646,2026-09-09,5477,Broaden JSON_HEDLEY_WARN_UNUSED_RESULT coverage to pure query functions (#5477),3171.706,5286.880,15430.844,4264.242,3880.943,1979.990,1472.289,1357.283,7569.854,1904.026,2407.487,671.673,1641.521,1889.053,,, +102,8e26b9d4b3,2026-09-09,5495,Make contains(json_pointer) return false instead of throwing on unrepresentable array-index tokens (#5495),3163.789,5240.755,15337.698,4226.154,3880.956,1971.912,1475.322,1357.125,7632.281,1904.060,2401.190,678.863,1638.371,1903.385,,, +103,b17c272f46,2026-09-09,5472,Reserve capacity in from_json() object conversion when the target container supports it (#5472),3152.899,5257.645,15401.000,4210.846,3885.123,1989.159,1476.637,1359.851,7639.396,1898.981,2408.243,670.075,1633.528,1894.086,,, +104,3e2de32226,2026-09-10,5516,Remove unused iomanip include (#5516),3141.349,5253.657,15364.074,4203.969,3847.620,1968.422,1455.035,1352.754,7582.494,1882.051,2371.814,663.504,1630.172,1870.223,,, +105,d69fb8654d,2026-09-10,5501,Return the parsed value by move from from_cbor() and friends (#5501),3133.485,5231.662,15309.926,4183.200,3835.662,1971.125,1462.447,1349.563,7479.136,1904.202,1595.991,661.519,1630.278,1883.994,,, +106,4a93aa4e2f,2026-09-10,5283,"Speed up parsing of contiguous input (numbers, strings, UTF-8) (#5283)",1963.879,4221.308,11609.531,3278.497,3857.880,927.779,1483.726,1357.793,7483.343,1906.916,1481.419,676.438,1643.746,1895.551,,, +107,bfb07786cd,2026-09-10,5473,Fix to_bjdata() silently truncating out-of-range _ArrayData_ elements (#5473),1941.894,4204.971,11726.688,3264.055,3808.784,923.797,1453.071,1351.760,7458.125,1891.470,1473.508,662.164,1633.043,1888.548,,, +108,ff80ed3295,2026-09-11,5285,"Speed up dump(), and keep it from overflowing the stack (#5285)",1939.289,4175.541,11781.291,3233.302,3816.101,914.071,441.200,540.473,6895.041,852.214,1478.197,656.635,1632.675,1885.303,,, +109,da42a627dc,2026-09-11,5449,Stop dump() from heap-allocating its output adapter per call (#5449),1937.658,4200.966,11639.198,3235.493,3827.695,909.901,448.948,537.008,6909.036,839.027,1479.968,659.210,1643.621,1878.065,,, +110,1dc1d09fc6,2026-09-11,5457,Do not search a container for the value the callback rejected (#5457),1937.459,4140.078,11576.803,3271.838,3845.193,924.316,450.148,539.031,6848.776,844.624,1470.333,671.563,1645.624,1900.347,,, +111,fae364db24,2026-09-11,5458,Move the scanned string into the value instead of copying it (#5458),1986.146,4110.787,11757.157,3150.932,3830.550,918.517,442.629,539.606,6913.104,843.920,1417.037,655.259,1628.224,1892.991,,, +112,dd50f0eb16,2026-09-11,5502,Stop CBOR indefinite-length strings from recursing per chunk (#5502),1987.853,4033.182,11613.834,3116.378,3841.164,915.943,442.366,539.480,6864.130,836.458,1431.035,656.146,1599.574,1885.858,,, +113,4bb2de8cc5,2026-09-11,5503,Reject a nested BJData ndarray dimension vector where it is read (#5503),1981.298,4086.276,11569.240,3141.539,3829.870,923.087,444.038,539.863,6800.724,835.434,1429.637,655.448,1628.999,1879.300,,, +114,44f8ec30e9,2026-09-11,5504,Bound UBJSON optimized arrays of a valueless type (#5504),2005.265,4092.265,11730.198,3130.635,3863.992,925.033,448.222,542.323,6893.078,849.901,1437.855,662.171,1638.306,1896.324,,, +115,0dd8ca9023,2026-09-11,5505,Read MessagePack containers without recursing per nesting level (#5505),2019.983,4105.305,11862.979,3142.581,3891.601,927.092,447.942,543.936,6939.963,845.634,1442.889,656.578,1637.512,1897.815,,, +116,91ab3e81f5,2026-09-11,5506,Read CBOR containers and tags without recursing per nesting level (#5506),1986.334,4039.961,11554.094,3118.761,3783.101,912.504,440.410,534.894,6831.943,834.661,1439.061,655.287,1615.619,1869.912,,, +117,a14619b354,2026-09-11,5507,Read UBJSON and BJData containers without recursing per nesting level (#5507),2011.959,4095.868,11782.688,3135.264,3873.604,926.014,447.638,541.304,6905.838,846.051,1468.512,664.161,1629.083,1898.772,,, +118,0452641c18,2026-09-11,5508,Read BSON documents without recursing per nesting level (#5508),1974.160,4043.887,11662.938,3095.011,3832.744,916.007,439.914,534.149,6904.453,835.615,1450.792,648.298,1616.917,1874.133,,, +119,aa391dc0a5,2026-09-11,5520,Fix two develop CI regressions: dump() nodiscard warning and binary-reader const-correctness (#5520),2003.010,4068.010,11771.364,3137.266,3825.247,924.668,442.416,539.478,6847.083,841.996,1460.659,649.378,1633.738,1885.897,,, +120,a50c2537eb,2026-09-12,5476,Reserve capped array capacity in json_sax_dom_parser::start_array() for definite-length binary arrays (#5476),1986.488,4063.883,11588.333,3077.995,3827.479,908.419,440.959,539.114,6806.177,833.555,1452.851,662.422,1627.995,1915.388,,, +121,c0b2878a44,2026-09-13,5493,Swap diagnostic positions in basic_json::swap() (#5493),2010.881,4081.057,11734.730,3130.919,3882.258,925.490,450.092,542.953,6925.188,848.486,1480.051,698.636,1643.508,1933.941,,, +122,1da2f68992,2026-09-14,5522,Only reserve array capacity if the array type supports it (#5522),1972.122,4048.622,11775.062,3107.938,3803.528,909.385,441.204,535.885,6793.927,842.843,1446.330,658.787,1619.239,1899.164,,, +123,6487678bc5,2026-09-15,5464,Fix swap(array_t&)/swap(object_t&) to update parent pointers under JSON_DIAGNOSTICS (#5464),2023.028,4116.169,11737.438,3165.172,3893.266,924.912,448.959,541.529,6970.438,852.039,1483.231,689.631,1635.240,1937.356,,, +124,c72f37a40d,2026-09-15,5443,Support custom object/array types and improve template parameter handling (#5443),2001.617,4076.547,11666.583,3109.756,3918.206,923.197,450.592,542.266,6901.703,846.558,1468.284,660.116,1641.586,1905.840,,, +125,502e9d66f6,2026-09-16,5479,Fix to_bjdata() emitting the Draft-3-only 'B' marker in default Draft-2 mode (#5479),1970.935,4018.060,11445.500,3079.409,3809.050,910.459,444.217,539.291,6851.407,833.755,1444.697,698.040,1626.601,1889.024,,, +126,c41152e620,2026-09-16,5494,Fall back to plain-object encoding when to_bjdata()'s _ArrayType_ annotation is not a string (#5494),1979.481,4054.688,11734.292,3085.542,3819.351,916.992,445.126,539.870,6853.005,833.190,1457.166,665.391,1629.586,1888.734,,, +127,e564136c22,2026-09-22,5465,Make diff() account for member order in ordered_json objects (#5465),1970.519,4063.744,11605.198,3087.497,3848.867,915.695,447.051,539.711,6835.172,841.402,1452.004,664.560,1640.751,1890.473,,, +128,e485441123,2026-09-22,5466,Restore a duplicate key's prior value when the callback rejects its new value (#5466),2012.920,4099.265,11796.895,3156.818,3913.812,931.464,451.403,541.419,6981.041,846.536,1469.521,704.138,1633.327,1905.709,,, +129,a2b19d6158,2026-09-22,5467,Honor allow_exceptions=false for excessive array/object size (out_of_range.408) (#5467),1996.478,4084.422,11734.208,3129.099,3850.854,923.499,446.555,539.379,6949.427,842.029,1453.166,694.200,1631.133,1888.865,,, +130,d2c1a6a272,2026-09-22,5468,"Reject array insert(pos, first, last) iterators not pointing into an array (#5468)",1983.767,4066.651,11618.667,3128.505,3848.427,914.900,447.603,541.973,6915.265,844.307,1458.762,677.699,1638.789,1892.443,,, +131,0b20b7e622,2026-09-22,5469,Reject MessagePack/BSON binary subtypes that don't fit their wire format (#5469),2010.548,4097.476,11681.218,3121.010,3866.146,925.619,448.533,540.786,6957.000,843.349,1463.518,658.302,1630.857,1902.522,,, +132,1054b2097e,2026-09-23,5286,Speed up binary writing: value-type output sink + byte-swap number encoding (#5286),1989.739,4101.393,12034.438,3157.240,3853.987,910.115,449.084,555.970,6884.386,864.526,1471.905,656.635,1661.806,1926.233,,, +133,ed513715a8,2026-09-24,5534,Document that a NUL byte in the input is treated as end of input (#5534),2016.236,4104.763,11906.323,3141.138,3936.240,916.611,455.397,562.053,6987.917,871.110,1475.622,657.877,1676.934,1936.557,,, +134,56b3ee566c,2026-09-24,5389,Fix stack overflow when copying a deeply nested value (#5387) (#5389),1998.356,4051.206,11660.865,3101.107,3834.672,910.072,452.943,544.464,6908.974,849.212,1460.691,638.644,1650.749,1914.423,,, +135,918da64657,2026-09-24,5542,Keep BJData ndarray annotations that would not survive a round trip as objects (#5542),2003.009,4042.969,11517.375,3095.122,3815.360,908.444,448.415,539.423,6911.041,840.044,1449.543,671.530,1651.709,1908.408,,, +136,8699de3064,2026-09-24,5555,Stop allocating the BJData excluded-marker list per container (#5555),2001.718,4071.333,11686.427,3122.065,3796.757,900.895,447.123,539.918,6860.765,844.752,1444.435,646.608,1644.943,1879.295,,, +137,2e91641de2,2026-09-24,5544,"Test JSON_BRACE_INIT_COPY_SEMANTICS for real, and fix one-element tuples under it (#5544)",2004.785,4083.914,11662.270,3119.602,3917.914,922.465,454.869,547.631,6987.234,853.010,1469.612,649.946,1672.246,1913.098,,, +138,7c90ec2323,2026-09-24,5546,Hash deeply nested values without recursing per nesting level (#5546),1952.912,4071.159,11594.927,3117.497,3793.052,900.729,444.245,539.787,6854.406,841.264,1457.530,643.139,1638.578,1890.482,,, +139,4daca40d7b,2026-09-24,5547,Merge deeply nested objects without recursing per nesting level (#5547),2008.226,4104.399,11619.542,3148.604,3918.175,921.207,457.191,547.553,6942.265,855.352,1464.974,651.924,1665.232,1915.869,,, +140,01b53c8c15,2026-09-25,5552,Keep JSON_DIAGNOSTICS parent pointers of ordered_json members after erase() and update() (#5552),1979.354,4061.378,11603.480,3098.586,3875.258,919.125,455.911,546.269,6940.026,849.511,1461.751,648.841,1660.978,1917.254,,, +141,abbe52d6de,2026-09-25,5344,Add JSON_PRECISE_STREAM_POSITION to leave the character that terminates a number in the stream (#5344),2001.170,4081.617,11653.531,3131.331,3876.208,915.153,453.436,546.720,6971.864,848.900,1463.182,647.946,1662.943,1906.246,,, +142,02dd3e67f2,2026-09-25,5390,Fix stack overflow and exponential runtime when comparing nested values (#5390),1987.861,4074.039,11596.000,3161.284,3901.497,919.541,447.553,543.948,6910.162,845.668,1455.759,664.224,1652.074,1930.575,,, +143,465407f3ce,2026-09-25,2818,Improve error message for const fields (#2818),1975.274,4118.565,11863.448,3130.541,3880.764,910.767,452.904,545.363,6906.890,843.118,1459.728,645.770,1654.265,1934.900,,, +144,632a5812a8,2026-09-25,5272,Support zero-member types in NLOHMANN_DEFINE_TYPE_* macros (#4041) (#5272),1963.323,4021.526,11747.959,3102.006,3784.896,904.545,444.355,543.748,6840.604,841.416,1438.306,639.223,1649.816,1930.274,,, +145,d19f7f5dce,2026-09-25,5185,Fix BSON conformance issue (#5185),1958.606,4048.536,11541.011,3086.805,3817.875,900.452,446.001,544.071,6824.323,837.078,1971.245,641.271,1651.209,1934.647,,, +146,c60a0bc336,2026-09-25,5573,Allocate the deep copy's key scratch space with the provided allocator (#5573),1965.216,4021.459,11630.855,3074.078,3807.258,902.782,444.394,542.562,6919.969,840.942,1975.668,645.827,1637.429,1918.607,,, +147,1e44262091,2026-09-25,5560,Make JSON_STRICT_NUL_HANDLING part of the ABI tag (#5560),1961.862,4069.617,11594.083,3117.500,3817.758,909.186,448.820,544.420,6845.802,844.016,1977.909,645.864,1651.269,1937.217,,, +148,95e9a5931c,2026-09-25,5553,"Write BSON in linear time, without recursing per nesting level (#5553)",1965.832,4033.394,11589.364,3120.422,3792.091,905.110,446.984,543.328,6794.244,844.943,1991.659,640.188,1647.675,1928.562,,, +149,fe4a544c7e,2026-09-27,5515,handled when size exceed uint32 (#5515),1998.244,4047.208,11755.209,3091.776,3815.000,908.733,447.990,546.295,6903.084,850.946,1993.351,645.487,1654.343,1933.385,,, +150,4fa95d9810,2026-09-27,5583,Remove unreachable branches from the binary writer (#5583),1983.323,4038.331,11666.480,3092.841,3844.935,910.149,449.697,541.110,6840.583,830.604,1979.750,653.542,1650.670,1928.883,,, +151,6178982b8d,2026-09-27,5582,Compare unordered objects by key below the nesting bound (#5582),1971.706,4073.498,11600.646,3132.700,3830.323,910.231,448.982,538.812,6836.770,846.149,2007.607,657.180,1653.089,1934.675,,, +152,f7972970a4,2026-09-27,5584,Throw instead of writing MessagePack lengths beyond UINT32_MAX (#5584),1969.417,4013.021,11602.447,3083.552,3842.495,904.223,447.444,542.170,6862.735,839.628,2000.766,655.034,1653.006,1939.922,,, +153,6bd106893a,2026-09-27,5559,Fix CBOR tag handling in cbor_tag_handler_t::store for non-binary items (#5559),1969.250,4034.693,11691.500,3119.171,3827.860,916.053,455.026,542.577,6886.360,839.718,2012.919,653.031,1651.090,1931.698,,, +154,1e101ecac1,2026-09-27,2998,Add BON8 support (#2998),1975.804,4082.375,11658.542,3192.828,3758.141,907.029,444.920,556.470,6844.698,849.276,1977.153,649.181,1645.306,1920.836,,, +155,9e1a09eec0,2026-09-28,5594,Name the key type when rejecting non-string CBOR/MessagePack map keys (#5594),2006.582,4151.784,11788.532,3156.156,3845.052,915.647,454.027,557.846,6814.282,864.094,2021.072,654.095,1663.051,1947.078,,, +156,fc03b9912e,2026-09-28,5597,"Look up the locale decimal point at conversion time, not lexer construction (#5597)",2020.431,4172.916,12716.958,3196.958,3909.774,910.001,449.314,547.334,6900.968,852.306,2048.019,665.843,1696.937,1982.586,,, +157,5b9ffae8bb,2026-09-30,5616,Move the float conversion chain out of the lexer (#5616),1992.332,4167.328,12638.573,3212.515,3842.885,906.649,446.941,539.674,6952.672,839.042,2021.057,695.813,1684.689,1967.216,,, +158,d268eaa693,2026-09-30,5617,Convert floats with Eisel-Lemire when std::from_chars is unavailable (#5617),1987.608,4086.125,11507.062,3170.013,3830.425,898.856,445.077,542.854,6919.568,839.210,2021.918,666.925,1701.466,1951.211,,, +159,65af260117,2026-09-30,5609,Move instead of deep-copy ordered_json values when an object grows (#5609),1998.981,4134.057,11592.855,3192.779,3863.005,904.702,446.575,539.685,6850.886,840.845,2035.646,680.331,1682.755,1968.744,,, +160,6a8a7735ed,2026-09-30,5614,Do not throw in contains() for an empty array reference token (#5614),2008.447,4144.024,11612.176,3165.468,3842.060,905.045,443.941,539.755,6846.042,846.248,1998.713,669.752,1684.717,1953.487,,, +161,0050d0f7a4,2026-09-30,5637,Share one nesting depth limit between all bounded descents (#5637),2021.078,4170.581,11589.886,3224.963,3937.021,906.411,448.033,541.177,6911.391,848.641,2040.978,670.005,1703.593,1984.639,,, +162,68beba727c,2026-09-30,5679,Fix from_json() for enums with underlying type bool (#5679),1986.468,4139.033,11632.833,3201.351,3798.006,888.464,438.471,535.903,6843.110,836.030,1996.109,685.053,1672.430,1940.598,,, +163,fc4c9c3446,2026-09-30,5680,Fix clear() to also reset the subtype of a binary value (#5680),1972.561,4094.867,11540.157,3155.722,3833.925,893.243,445.764,539.739,6848.562,843.068,2016.293,664.788,1685.759,1965.342,,, +164,678fd3017b,2026-09-30,5681,Fix element path for map/unordered_map JSON_DIAGNOSTICS errors (#5681),2014.783,4164.471,11563.614,3219.865,3891.917,892.727,445.945,542.044,6900.807,844.422,2034.323,669.901,1688.051,1981.601,,, +165,6d7845d207,2026-09-30,5683,Fix deprecated json_pointer/string operator== warning in value() (#5683),1965.197,4105.789,11501.364,3157.544,3800.289,898.122,445.399,539.685,6900.433,834.541,2000.133,652.354,1670.945,1960.876,,, +166,42f89e3130,2026-09-30,5684,Let to_json(std::optional) propagate exceptions from T's to_json (#5684),2016.899,4156.430,11476.489,3216.315,3895.245,908.714,444.300,541.764,6923.422,839.459,2018.934,672.859,1689.306,1987.428,,, +167,6218aa212b,2026-09-30,5687,Throw std::length_error for operator[](SIZE_MAX) instead of corrupting the array (#5687),1989.158,4149.156,11547.229,3193.015,3845.187,905.308,446.389,541.290,6853.266,843.028,2037.245,661.213,1681.390,1966.649,,, +168,1151826508,2026-09-30,5691,Take diff()'s fast path unless the object type reorders members (#5691),1991.280,4147.341,11570.312,3171.182,3847.333,904.510,441.250,539.803,6885.776,836.303,2018.693,665.307,1685.990,1970.057,,, +169,e444a66276,2026-09-30,5693,Copy values before inserting an initializer list into an array (#5693),2000.774,4175.507,11546.979,3189.357,3841.169,897.455,442.384,539.493,6839.688,836.213,2014.519,667.390,1685.418,1968.991,,, +170,bfea6f36d3,2026-09-30,5694,Fix to_msgpack() reading the inactive number union member (#5694),1997.465,4144.279,11549.781,3224.287,3855.120,899.475,441.995,539.924,6903.776,839.550,2019.396,664.487,1688.249,1954.211,,, +171,5b11a0282c,2026-09-30,5697,Exchange the CustomBaseClass subobject in basic_json::swap() (#5697),1987.983,4074.349,11483.114,3174.632,3841.604,893.256,438.279,535.885,6866.641,834.328,1996.396,660.828,1676.300,1936.210,,, +172,44a88d85be,2026-09-30,5698,Fix NLOHMANN_JSON_SERIALIZE_ENUM_STRICT's from_json message (#5698),1972.237,4125.945,11373.917,3158.716,3810.039,890.097,438.075,534.577,6867.432,842.045,2028.150,664.206,1681.353,1936.231,,, +173,bfe0f32d71,2026-09-30,5699,Fix std::terminate and null pointer access in input_stream_adapter (#5699),2014.371,4159.779,11667.416,3200.425,3876.135,911.716,448.788,543.198,6932.657,852.397,2056.197,668.764,1699.573,1984.479,,, +174,4bb1b14b06,2026-09-30,5702,Trim the compiler-appended NUL from wide/UTF string literals too (#5702),1979.723,4105.685,11603.562,3180.932,3846.698,906.188,443.969,534.534,6837.479,840.588,2006.043,654.851,1672.289,1965.408,,, +175,5bd766aa50,2026-09-30,5703,Move to_bson's binary subtype check into calc_bson_sizes (#5703),1999.606,4183.386,11588.646,3192.771,3844.425,900.169,446.795,541.406,6888.114,847.107,2022.637,663.480,1686.702,1974.777,,, +176,6ae17630a4,2026-09-30,5705,"Reject integral keys for contains(), find(), and count() at compile time (#5705)",2000.405,4157.120,11551.656,3197.417,3891.646,903.558,448.544,541.553,6914.203,848.561,2042.578,663.661,1691.910,1974.341,,, +177,7fd6895788,2026-09-30,5706,Hide a discarded container's content from the parser callback (#5706),1971.987,4075.362,11463.219,3164.909,3797.453,889.534,443.974,535.026,6857.323,835.793,2025.343,651.970,1687.670,1951.428,,, +178,66877675b1,2026-09-30,5719,"Check the iterator range for binary values in basic_json(first, last) (#5719)",1970.369,4104.886,11534.635,3168.601,3796.291,897.271,444.655,538.917,6826.990,842.445,2016.962,650.099,1673.940,1953.693,,, +179,2ea6d8c127,2026-09-30,5720,Require the found key to equal the looked-up key when comparing objects (#5720),2015.556,4188.886,11567.125,3251.890,3863.818,903.970,448.691,540.422,6912.255,843.774,2044.479,653.832,1676.634,1951.959,,, +180,67435c9c7e,2026-09-30,5721,Give a deep copy its type only after its container exists (#5721),1994.257,4160.658,11600.553,3218.367,3880.128,900.769,449.260,541.607,6899.448,841.635,2043.909,666.759,1694.646,1974.861,,, +181,6fc0d501f3,2026-09-30,5610,Move the user-defined string literals to and add JSON_NO_AUTOMATIC_UDLS (#5610),2021.715,4187.888,11647.594,3209.388,3925.060,911.591,450.961,544.303,6975.265,845.109,2049.853,670.295,1697.019,1987.428,,, +182,fdcc569eee,2026-09-30,5692,Use only documented StringType members in json_pointer (#5692),1965.264,4147.273,11378.188,3159.364,3787.758,889.399,447.397,535.062,6809.698,835.116,2015.202,656.241,1689.072,1955.238,,, +183,6a073dbae4,2026-09-30,5695,Give operator>> a strong exception-safety guarantee (#5695),2010.979,4211.982,11698.218,3205.401,3897.172,898.499,445.961,545.225,6898.870,847.042,2051.316,664.716,1706.401,1981.247,,, +184,3b6ae43c53,2026-09-30,5598,Add JSON_DISABLE_TUPLE_REFERENCE_CONVERSION to fix std::tuple conversions (#5598),2025.122,4195.468,11682.199,3204.529,3924.068,904.766,448.209,544.669,7041.276,849.103,2047.488,665.592,1695.987,1984.755,,, +185,7d7055ec50,2026-09-30,5723,Fix stack overflow converting deep values between specializations (#5723),1985.310,4117.099,11457.052,3157.591,3832.175,895.910,442.225,535.237,6864.375,833.653,2001.760,679.826,1674.819,1956.998,,, +186,35802e78d6,2026-09-30,5735,Remove dead Makefile targets; document macro_builder; tidy serve_header (#5735),2004.498,4163.065,11590.594,3184.810,3902.229,906.494,447.394,539.542,6923.969,845.596,2044.457,666.187,1692.019,1977.030,,, +187,c261578431,2026-09-30,5730,Deduplicate binary reader/writer helpers and fix stale comments (#5730),1968.723,4154.789,11441.718,3160.367,3870.578,889.545,443.139,535.314,6850.886,837.281,2024.650,660.842,1691.628,1978.000,,, +188,1d675cdb46,2026-09-30,5733,Fix CI jobs that check less than they claim; move arm64 to GitHub (#5733),1995.704,4206.185,11691.125,3227.622,3966.104,909.748,449.770,541.566,6951.938,852.506,2009.592,663.701,1686.265,1983.285,,, +189,a32f61eb98,2026-09-30,5678,Fix update() and merge_patch() when the argument is *this or one of its members (#5678),2014.810,4157.101,11636.135,3210.326,3924.659,899.344,448.133,541.371,6913.401,841.487,2038.263,667.515,1697.503,1980.686,,, +190,18dd5663b0,2026-10-01,5548,Diff deeply nested values without recursing per nesting level (#5548),1990.931,4152.500,11469.697,3204.740,3985.593,903.248,448.981,540.974,6929.740,847.493,2040.504,665.352,1698.903,1981.438,,, +191,3926fcaac3,2026-10-01,5729,"Deduplicate serializer dump code; fix stale includes, docs, and lint (#5729)",1999.556,4178.489,11581.000,3208.657,3876.755,891.669,452.445,538.525,6893.078,846.721,2042.010,662.154,1689.653,1975.503,,, +192,cff0a61369,2026-10-01,5731,Share DOM SAX position handling; fix stale parser and lexer comments (#5731),2017.231,4112.604,11588.291,3157.047,3890.343,902.329,458.713,539.539,7020.568,847.995,2073.873,654.562,1696.823,1978.381,,, +193,e400780533,2026-10-01,5745,Re-amalgamate single_include (#5745),1980.338,4100.659,11418.854,3166.896,3835.432,885.298,452.886,538.053,6888.203,824.666,2031.410,650.846,1668.952,1949.107,,, +194,6aec1a085f,2026-10-02,5677,Report BON8 input that ends after a UTF-8 lead byte as truncated (#5677),2003.321,4099.066,11614.364,3159.029,3849.857,899.995,459.542,539.436,6904.474,843.221,2071.503,652.303,1685.702,1972.556,,, +195,4d46bce4e1,2026-10-02,5750,Fix CI on develop (#5750),1962.685,4025.677,11277.718,3103.052,3785.213,894.610,448.583,533.887,6870.062,834.856,2020.231,658.339,1674.874,1954.242,,, +196,63c10a51fc,2026-10-02,5638,"Review and extend the documentation, and check it in CI (#5638)",1968.954,4036.851,11425.135,3104.359,3797.852,902.519,451.067,537.668,6910.375,852.438,2043.889,674.938,1701.314,1971.711,,, +197,6d0867a85f,2026-10-02,5751,Make comparisons with scalars noexcept only when the conversion is (#5751),2008.360,4091.453,11376.562,3144.575,3820.110,903.850,455.980,538.035,6851.885,841.549,2010.128,667.182,1690.586,1970.957,,, +198,d11e89471b,2026-10-04,5606,Assert on missing array indices in const operator[] and document the JSON pointer case (#5606),2000.121,4075.695,11475.520,3139.456,3837.211,900.437,453.703,538.895,6921.432,845.064,2027.417,663.969,1679.148,1964.082,,, +199,df27cc3d4c,2026-10-04,5682,Add scalar-on-left overloads for legacy discarded comparisons in C++20 (#5682),2010.838,4092.432,11495.625,3125.726,3873.167,911.281,456.807,538.386,6911.630,844.451,2033.630,688.219,1691.407,1971.697,,, +200,6f2048cd5d,2026-10-04,5685,Accept lvalues in ordered_map::emplace's value parameter (#5685),1999.816,4095.006,11445.740,3136.685,3924.146,918.692,458.336,542.423,6968.520,848.783,2037.096,667.772,1708.274,2002.449,,, +201,0d01d6ae90,2026-10-04,5686,Classify leaves with operator<=> itself past the nesting bound (#5686),1983.320,4116.981,11466.250,3192.969,3923.208,914.596,456.625,539.558,6975.537,849.252,2056.035,701.221,1716.493,1983.908,,, +202,b730946432,2026-10-04,5689,Fix key types convertible to std::string_view breaking lookups (#5689),1990.288,4060.487,11377.709,3107.537,3803.857,892.191,451.727,538.045,6896.480,844.989,2018.884,658.649,1676.566,2023.638,,, +203,49cd427196,2026-10-04,5690,"Copy-construct the base class of a deep copy's elements, not assign it (#5690)",1983.320,4033.156,11333.843,3138.547,3882.878,894.785,454.473,538.337,6918.619,841.205,2072.151,655.193,1693.871,1977.288,,, +204,756b28c2b8,2026-10-04,5696,Keep a NUL byte ending a // comment as the end of input (#5696),1985.931,4099.331,11579.875,3148.560,3872.422,896.276,451.436,536.774,6901.156,845.631,2014.820,648.054,1685.199,1971.762,,, +205,1edf0ef041,2026-10-04,5700,"Fix value(json_pointer, default) aborting under JSON_NOEXCEPTION (#5700)",1987.233,4076.133,11442.625,3124.099,3888.688,898.266,454.349,539.423,6950.140,852.803,2030.279,654.586,1691.751,1978.197,,, +206,a212d3b2e4,2026-10-04,5722,Preserve the object comparator's state in a deep copy past the nesting bound (#5722),2000.138,4113.471,11391.854,3151.006,3866.904,905.695,455.384,539.504,6929.818,842.213,2029.619,674.438,1697.044,1983.856,,, +207,1df1e8a845,2026-10-04,5591,Make cross-string-type basic_json conversion explicit without implicit conversions (#5591),2000.533,4107.994,11370.989,3160.854,3881.635,897.877,455.201,540.307,6927.167,840.130,2053.458,664.118,1697.618,1982.876,,, +208,38a2db260c,2026-10-04,5728,Remove dead metaprogramming and duplicated code in traits and pointers (#5728),1971.450,4040.828,11319.270,3109.521,3819.505,903.606,451.137,538.725,6825.640,843.951,2016.652,663.160,1684.596,1958.896,,, +209,c5650eaa3c,2026-10-04,5704,Reject malformed UTF-16/UTF-32 units in wide-string input (#5704),2006.689,4133.594,11469.209,3180.930,3881.633,902.924,456.572,540.557,6992.385,850.474,2025.267,652.367,1680.025,1957.468,,, +210,40021f38fb,2026-10-04,5589,Add basic_json::as_base_class and document name conflicts with custom base classes (#5589),2012.673,4147.193,11453.250,3167.448,3892.542,910.149,457.238,541.642,6998.084,852.247,2049.759,652.868,1688.229,1972.508,,, +211,73e9eae3c1,2026-10-04,5746,Add an error_handler parameter for UTF-8 to the binary readers and writers (#5746),2013.845,4130.237,11456.041,3135.688,3818.956,892.111,449.408,538.308,6825.213,835.872,1495.468,697.054,1679.760,1970.285,,, +212,d8d47be4a5,2026-10-04,5754,Fix CI on develop after merging the ready-to-merge PRs (#5754),2013.191,4119.948,11573.656,3173.029,3941.703,912.201,459.208,541.264,7013.364,848.908,1514.681,699.273,1685.391,1984.652,,, +213,6b4b825af2,2026-10-04,5607,Handle numbers that do not fit narrow number types in the binary readers (#5607),2009.190,4044.127,11362.677,3127.688,3827.841,892.131,449.386,534.731,6915.360,829.562,1487.640,697.206,1688.237,1952.157,,, +214,8c1f60a45e,2026-10-04,5600,Store maps with enum keys as objects (opt-in) (#5600),2008.560,4128.059,11523.011,3187.763,3843.177,912.520,456.427,537.514,6859.010,839.685,1501.515,696.508,1688.848,1968.910,,, +215,c5a7a4b46d,2026-10-04,5688,"Add deprecated from_bon8/from_bjdata(ptr, len) overloads (#5688)",2030.310,4108.505,11412.907,3141.836,3899.435,904.756,455.298,541.069,6926.151,846.240,1504.193,700.820,1693.983,1987.713,,, +216,23d3b373e1,2026-10-04,5755,Add JSON_DELETE_DEPRECATED_FUNCTIONS to delete the deprecated functions (#5755),2018.708,4106.015,11533.729,3134.945,3826.409,899.623,452.833,538.544,6846.443,830.555,1509.060,705.724,1692.819,1971.476,,, +217,8a142bc436,2026-10-06,5764,"Fix CI on develop after #5600, #5607, and #5755 (#5764)",2017.533,4151.854,11526.334,3195.240,3884.953,907.457,456.697,540.114,6891.136,844.145,1517.241,699.051,1690.344,1972.104,,, +218,5379e04ce4,2026-10-06,5761,Throw type_error.321 when serializing discarded values to binary formats (#5761),1999.156,4055.300,11427.521,3153.581,3836.060,891.927,455.413,540.938,6883.093,853.094,1510.099,701.888,1686.695,1982.806,,, +219,0a365865f9,2026-10-06,5762,Make basic_json destruction allocation-free and non-recursive (#5762),2024.289,4081.646,10719.428,3112.958,3900.503,924.900,462.081,540.765,6965.453,850.019,1511.381,669.802,1620.269,1912.078,,, +220,5ecb704f6b,2026-10-06,5592,Speedup; check for the expected separator before the lexer's token switch (#5592),1920.428,3801.979,10139.250,2891.862,3833.159,823.859,451.951,540.310,6885.672,843.570,1512.778,668.793,1608.501,1885.206,,, +221,6d4543e743,2026-10-06,5767,Fix destroy() for ObjectTypes without reverse iteration (#5767),1929.030,3843.266,10232.541,2911.458,3926.867,830.030,450.002,542.043,6938.890,846.589,1515.211,675.264,1622.245,1904.006,,, +222,9b179cee1e,2026-10-06,5770,Handle all value_t enumerators in has_no_children() (#5770),1931.275,3794.497,10155.125,2891.927,3871.831,829.432,446.176,535.126,6909.625,833.114,1498.945,677.571,1615.785,1884.043,,, +223,69874e4544,2026-10-06,5760,Fix NUL bytes in UBJSON/BJData high-precision numbers (#5760),1924.896,3853.081,10247.750,2926.515,3872.041,835.227,453.025,541.002,6919.037,842.240,1521.169,674.487,1607.441,1880.884,,, +224,162e13b86f,2026-10-06,5758,Add with_*_t alias templates to create basic_json types with changed template parameters (#5758),1938.268,3842.126,10289.968,2914.104,3962.414,834.967,455.536,543.630,6969.266,850.082,1530.064,678.054,1635.303,1916.763,,, +225,21a69230bd,2026-10-06,5585,Create a value before giving it its type (#5585),1918.165,3829.354,10247.656,2914.619,3874.909,832.287,451.252,543.791,6873.995,839.514,1521.088,699.604,1615.742,1894.449,,, +226,ff6f3d7d4a,2026-10-07,5766,Reject nested indefinite-length CBOR string chunks (#5766),1926.074,3868.810,10256.823,2919.802,3957.807,832.129,457.241,543.640,7024.745,847.770,1522.612,705.623,1634.212,1918.402,,, +227,1c754cfe31,2026-10-07,5701,Copy a pair-shaped array value under JSON_BRACE_INIT_COPY_SEMANTICS (#5701),1930.652,3828.195,10263.927,2921.570,3901.404,832.628,455.652,541.701,6909.037,843.563,1512.309,704.354,1623.254,1909.917,,, +228,24dd7c63f0,2026-10-07,5777,Re-amalgamate after #5740 (#5777),1908.632,3833.930,10278.146,2905.443,3935.422,838.465,454.491,545.605,6905.047,839.087,1519.816,709.223,1618.643,1886.706,,, +229,30e542e52a,2026-10-07,5776,Declare the namespace-scope constants in to_chars.hpp inline (#5776),1934.934,3823.724,10229.636,2916.698,3929.565,829.102,452.279,543.038,6951.995,837.059,1524.049,720.722,1619.823,1903.938,,, +230,367336c83d,2026-10-07,5779,Fix CI on develop after #5585 (#5779),1928.921,3780.927,10153.395,2883.604,3877.750,824.488,451.999,543.662,6927.395,835.495,1506.387,694.058,1622.903,1907.732,,, +231,069ace74af,2026-10-07,5707,"Round-trip BJData ND-array annotations exactly (single precision, key order) (#5707)",1937.387,3843.716,10184.302,2923.323,3936.570,827.610,456.123,543.169,6907.756,847.020,1515.229,696.202,1626.001,1901.142,,, +232,43fe8928e1,2026-10-07,5781,Stop binary writers overflowing the stack on deep values (#5781),1961.046,3868.274,10300.573,2899.792,3982.526,845.594,461.395,543.298,7059.093,846.696,1522.728,697.717,1623.846,1921.370,,, +233,a5f5d3059b,2026-10-07,5772,Make std::hash consistent with operator== for numbers (#5772),1949.220,3857.159,10170.427,2890.052,3981.349,840.234,459.334,541.947,6953.786,843.495,1509.713,703.339,1627.086,1911.653,,, +234,a269794db7,2026-10-08,5782,Use MSVC intrinsics for full multiplication (#5782),1931.869,3817.742,10159.666,2902.820,3903.263,840.740,455.827,540.621,6884.562,843.272,1513.776,702.028,1614.459,1901.008,,, +235,69a0c1b82c,2026-10-09,5328,Avoid allocating temporary basic_json for cbor and msgpack object keys (#5328),1909.579,3777.560,10065.682,2852.732,3897.659,833.289,459.856,540.631,6882.354,833.998,1498.288,314.059,1609.343,1906.714,,, +236,374dfe4f0f,2026-10-09,5791,Keep converted object keys alive while writing UBJSON and BJData (#5791),1911.274,3827.188,10159.553,2886.568,3890.388,833.632,459.800,542.649,6954.547,838.507,1509.324,314.357,1613.655,1892.838,,, +237,44e8597701,2026-10-09,5792,Flatten deeply nested values without recursing per nesting level (#5792),1940.103,3811.779,10139.396,2865.050,3874.896,835.001,459.686,544.065,6866.943,836.862,1496.298,314.617,1614.837,1891.741,,, +238,2913e96433,2026-10-09,5793,Unflatten in time and memory linear in the pointer depth (#5793),1908.453,3785.099,10262.147,2878.961,3920.657,845.619,459.806,543.998,6874.813,832.659,1486.901,312.175,1589.620,1863.981,,, +239,84ee12a67c,2026-10-09,5797,Make UTF8_ACCEPT/UTF8_REJECT inline variables to avoid TU-local exposure in modules (#5797),1922.691,3792.849,10162.656,2871.562,3887.719,836.308,456.522,542.577,6912.807,840.369,1497.447,313.683,1609.988,1899.591,,, +240,1649d9eda4,2026-10-11,5783,Use and extend the detail helpers to remove duplicated code (#5783),1916.258,3804.242,10297.344,2913.118,3847.662,836.519,453.270,538.750,6953.015,832.774,1506.068,324.715,1596.974,1875.878,,, +241,2cca04ae6f,2026-10-11,5800,Report one-character non-numeric array indices like longer ones (#5800),1932.327,3803.750,10135.438,2881.041,3894.622,840.016,458.569,538.037,6842.948,829.444,1499.722,324.811,1607.194,1875.851,,, +242,74a03dec84,2026-10-11,5802,Throw type_error.321 for discarded values in to_bon8 (#5802),1924.695,3814.854,10084.239,2873.180,3848.498,839.406,450.575,534.181,6893.005,834.300,1503.369,324.389,1607.323,1887.871,,, +243,e8b747e4bc,2026-10-11,5808,Re-amalgamate single_include after #5795 and #5806 (#5808),1937.995,3840.622,10221.990,2896.024,3885.568,834.394,458.874,539.771,6906.182,839.793,1517.689,324.800,1609.838,1890.885,,, +244,40a62947d3,2026-10-12,4965,support JSON Merge Patch (RFC 7396) diff creation (#4965),1932.021,3822.188,10248.416,2924.560,3980.331,842.462,459.010,540.237,6978.526,838.941,1529.508,326.435,1636.153,1917.472,,, +245,f23830b65e,2026-10-13,5809,Derive the lexer position lazily for seekable input (#5809),1814.075,3368.028,9974.755,2807.532,3943.229,647.639,457.018,551.206,6954.166,843.355,1522.762,315.716,1618.953,1903.816,,, +246,aa9620fb15,2026-10-13,5810,Skip the indentation after a newline 8 bytes at a time (#5810),1719.629,2959.344,10139.771,2799.555,3939.292,592.867,465.821,545.858,6968.068,849.167,1519.774,315.385,1629.981,1907.253,,, +247,e839bbd1c0,2026-10-13,5813,"Export client-facing headers from json.hpp for IWYU / include-cleaner, and check clients in CI (#5813)",1725.742,2949.070,10136.603,2821.591,3919.927,589.957,463.642,544.851,6987.427,843.151,1517.562,314.425,1619.671,1903.613,,, +248,5b4c8f9b00,2026-10-14,5738,"Speed up the lexer: own float parser, string scan, and \u table (#5738)",1615.668,2934.565,8763.651,2794.503,3928.286,559.107,374.921,516.391,6937.140,815.776,1513.238,325.043,1625.226,1912.905,,, +249,91a7a94cc6,2026-10-14,5634,"Write doubles with the shortest digits (Żmij), digits in registers (#5634)",1613.126,2929.599,8708.599,2783.954,3874.248,548.449,363.632,468.127,2421.176,745.466,1511.406,323.743,1614.195,1900.392,,, +250,a6e9785ab6,2026-10-15,5831,Look up the key only once in the callback parser's key() (#5831),1589.309,2938.557,8798.823,2767.872,3882.154,547.301,364.257,467.833,2395.851,744.716,1506.830,316.192,1623.771,1899.458,,, +251,0c4e7c103c,2026-10-15,5834,Make flatten() linear for ordered_json (#5834),1625.754,2936.203,8755.088,2793.081,3879.740,557.529,366.745,468.359,2418.388,746.210,1524.325,315.954,1614.677,1898.544,,, +252,0a4b3a84ee,2026-10-15,5836,"Speed up JSON pointer parsing, formatting, comparison and lookup (#5836)",1622.914,2915.901,8819.073,2783.990,3922.758,558.429,366.216,470.019,2427.606,747.168,1526.881,316.972,1625.611,1912.601,,, +253,6ba53e63dd,2026-10-15,5833,Speed up array-to-container from_json (#5833),1626.155,2920.747,8777.989,2782.870,3988.206,560.154,367.695,469.892,2427.262,749.301,1529.474,316.399,1631.810,1915.217,,, +254,ca7740fef2,2026-10-15,5837,Move elements when converting rvalue containers to JSON (#5837),1615.747,2928.778,8765.792,2773.062,3926.456,561.034,367.498,469.807,2424.344,748.423,1523.215,316.339,1624.374,1894.455,,, +255,4530d9681c,2026-10-15,5832,Fix quadratic parent updates for ordered_json with JSON_DIAGNOSTICS (#5832),1618.937,2911.378,8794.094,2763.191,3886.974,555.789,366.475,469.275,2415.231,746.755,1512.590,315.856,1618.226,1899.284,,, +256,91869983a0,2026-10-15,5840,Make the value lifecycle inline-friendly (#5840),1595.075,2832.274,8420.390,2690.050,3876.841,555.209,366.118,469.783,2424.335,747.931,1485.914,314.048,1549.787,1775.823,,, +257,6a27b9acb2,2026-10-15,5838,Construct remaining hot-path exceptions out of line so core functions inline (#5838),1589.535,2824.360,8466.755,2699.690,3888.990,557.917,364.879,471.601,2422.995,746.543,1498.371,314.978,1539.656,1797.752,,, +258,4f11512641,2026-10-15,5835,"Speed up container destruction, iterator access and diff() (#5835)",1515.750,2714.756,8639.213,2574.698,3805.860,561.827,366.793,469.680,2421.769,748.727,1383.744,317.248,1446.525,1705.789,,, +259,ed86019a21,2026-10-15,5839,Move binary reader error construction out of line (#5839),1507.907,2766.774,8597.870,2622.289,3767.638,553.026,362.644,468.482,2408.731,744.936,1362.080,324.833,1445.531,1703.216,,, +260,6261d1e432,2026-10-15,5842,Construct the JSON Patch exceptions out of line (#5842),1532.015,2756.867,8670.677,2617.989,3869.133,558.865,365.834,469.932,2435.279,750.295,1380.628,327.010,1453.340,1705.232,,, +261,ce28c722bc,2026-10-15,5815,Allow the same type for number_integer_t and number_unsigned_t (#5815),1533.045,2775.807,8543.755,2615.412,3776.721,553.127,365.866,471.174,2433.384,745.309,1372.372,328.405,1452.848,1716.649,,, +262,91b9ee2602,2026-10-15,5829,Update cppcheck to 1.5.2 (Cppcheck 2.20) and fix its new findings (#5829),1516.450,2748.961,8571.521,2599.870,3807.744,557.303,367.220,472.209,2421.389,743.889,1379.405,326.087,1451.926,1710.506,,, +263,dcb96e82fb,2026-10-15,5822,Escape characters below 0x60 from a table straight into the write buffer (#5822),1525.777,2734.963,8524.771,2588.289,3790.726,557.907,360.057,463.574,2430.626,743.382,1375.816,325.308,1439.947,1695.307,,, +264,b41228c227,2026-10-15,5843,Fix AppVeyor failures from the Zmij double writer (#5843),1497.922,2690.614,8406.906,2582.482,3726.195,548.374,352.932,459.663,2398.953,737.639,1347.507,322.827,1429.640,1682.775,,, +265,4da73dc5ff,2026-10-15,5858,Fix compiler warnings on develop from the API performance stack (#5858),1523.138,2731.825,8474.073,2593.149,3782.769,553.758,359.180,462.915,2380.246,739.049,1346.755,324.909,1441.408,1698.043,,, +266,5683f5e024,2026-10-15,5859,Define less_general() only without three-way comparison (#5859),1504.689,2739.172,8603.693,2605.159,3797.057,560.213,358.865,464.429,2423.456,742.207,1374.000,326.702,1447.488,1712.379,,, +267,cd6b428ef0,2026-10-16,5860,Fix CI failures on develop from the API performance stack (#5860),1510.160,2732.695,8564.510,2603.242,3810.518,556.015,362.409,466.047,2437.364,745.153,1377.439,325.753,1444.892,1699.255,,, +268,cc8334113c,2026-10-19,5866,Do not use Qt's keyword macros as identifiers (#5866),1498.858,2732.644,8535.328,2587.258,3787.993,548.267,362.607,464.487,2403.147,735.633,1368.831,323.997,1442.709,1686.963,,, +269,4da932f518,2026-10-19,5828,Make parsing from std::istream and FILE* fast (#5828),1499.289,2723.605,8397.787,2597.237,1956.330,553.182,363.501,458.898,2397.342,733.054,1362.816,320.346,1429.314,1698.294,,, +270,122d718330,2026-10-21,5620,"Add json_document and json_view: node index, parser, and document (#5620)",1520.651,2751.099,8527.135,2588.494,1994.466,560.384,362.257,461.917,2393.611,741.198,1362.167,328.620,1441.211,1691.238,230.700,389.375,976.277 +271,43e97b629b,2026-10-21,5622,"Add element access, iteration, values, and JSON pointers to json_view (#5622)",1493.875,2687.307,8383.354,2567.078,1986.311,547.934,353.938,462.380,2400.331,737.098,1374.560,322.012,1445.504,1686.421,231.353,386.679,958.441 +272,4c3a3eb5b5,2026-10-21,5624,Add dump() and comparisons to json_view (#5624),1502.926,2714.747,8522.161,2608.565,2001.856,552.014,359.510,462.656,2393.110,732.091,1366.524,324.313,1442.119,1682.564,228.836,393.082,976.976 +273,3ff37ead75,2026-10-21,5628,Scan json_view strings with SIMD and index large objects (#5628),1514.580,2728.619,8406.562,2609.758,2041.176,556.017,357.330,462.573,2383.158,733.939,1368.057,324.391,1442.711,1700.884,177.833,367.806,950.071 +274,823eee3b59,2026-10-21,5630,"Add editable json_documents: set, push_back, insert, and erase (#5630)",1498.134,2754.810,8537.062,2588.474,1994.441,556.670,353.931,463.646,2392.987,740.023,1357.930,324.129,1441.622,1698.022,181.404,376.470,962.253 +275,4971200b54,2026-10-21,5632,Add images of json_documents: save() and load() (#5632),1494.231,2681.211,8425.834,2543.276,1984.849,548.146,354.762,460.440,2414.747,734.679,1363.841,321.349,1421.806,1670.134,177.777,368.631,949.292 +276,4155e2938f,2026-10-21,5633,Write json_view's dump() without a call or conversion per token (#5633),1500.247,2712.357,8612.193,2597.211,2012.860,558.559,359.889,462.371,2412.896,739.048,1372.456,324.070,1441.546,1697.571,180.320,371.514,954.088 +277,08d7fbb0a1,2026-10-21,5874,Read FILE* input with std::fgetc under MemorySanitizer (#5874),1543.124,2758.211,8565.730,2584.453,2046.255,558.522,358.865,464.542,2421.435,743.715,1374.005,324.687,1462.572,1700.819,180.714,372.601,965.361 +278,0cbe95ffa2,2026-10-21,5824,"Speed up writing CBOR and MessagePack, above all integer arrays (#5824)",1501.550,2706.534,8707.120,2584.807,2039.728,551.688,360.692,466.024,2397.182,742.777,1361.847,201.488,1429.223,1682.436,178.641,371.038,946.389 +279,bd5227c2ec,2026-10-21,5805,Fix silent wrong results for custom number types (#5805),1511.036,2733.325,8786.406,2588.906,2000.483,553.456,360.458,465.989,2398.381,743.338,1370.524,201.168,1444.051,1701.345,179.776,372.557,954.733 +280,e13e976801,2026-10-21,5851,Accumulate number digits while scanning them (#5851),1501.737,2667.570,7762.365,2523.289,1987.518,545.368,359.336,462.056,2407.652,739.226,1368.104,200.632,1440.390,1688.117,178.721,374.278,956.353 +281,5e13f834c1,2026-10-21,5852,Copy the text of float tokens only when a SAX handler asks for it (#5852),1512.318,2655.312,7314.354,2515.044,2019.288,547.993,362.038,463.788,2410.262,745.839,1364.898,208.969,1450.422,1713.902,179.198,371.996,968.699 +282,e9970066c5,2026-10-21,5853,"Scan strings with SSE2, SSSE3, or NEON (#5853)",1488.705,2654.404,7339.589,2551.050,2015.716,486.719,341.381,475.591,2434.369,756.973,1376.754,208.797,1449.981,1706.044,182.358,379.153,968.355 +283,fa37b952df,2026-10-21,5854,Match literals without a stack array and keep parser states in bytes (#5854),1471.894,2619.164,7285.000,2485.883,1949.380,471.534,347.785,475.287,2413.552,751.487,1374.254,207.522,1443.177,1699.611,181.643,377.971,977.268 +284,52fecc1fab,2026-10-21,5855,Move object keys into the value when parsing (#5855),1392.599,2628.688,7362.562,2485.293,1882.663,471.968,339.711,473.663,2414.903,751.376,1319.857,200.185,1448.057,1705.675,179.410,371.865,963.306 +285,6aefd8c662,2026-10-21,5878,Copy short printable-ASCII strings without starting the scanner (#5878),1399.384,2664.401,7232.557,2535.425,1922.431,470.185,320.230,418.440,2446.082,696.786,1317.889,201.955,1447.217,1701.135,180.860,376.217,968.215 +286,7c26e99ac5,2026-10-21,5879,Copy ASCII strings in the view's dump with ensure_ascii (#5879),1361.839,2610.182,7187.115,2471.708,1853.592,464.274,313.821,414.316,2388.840,687.851,1318.253,200.399,1434.986,1697.487,178.601,368.595,947.799 +287,3e031b06a5,2026-10-21,5876,"Use standard library helpers where available, with C++11 fallbacks (#5876)",1381.599,2592.122,7336.719,2499.994,1848.434,467.895,315.257,415.788,2430.769,692.250,1311.164,200.424,1444.303,1698.311,180.149,374.484,961.091 +288,9bf531436f,2026-10-21,5861,"Speed up flatten(), unflatten(), diff() and patch() (#5861)",1379.301,2613.219,7170.433,2472.628,1853.035,467.161,315.217,412.303,2406.597,683.062,1298.512,198.681,1434.089,1682.912,177.511,368.116,947.255 +289,9855db81f3,2026-10-22,5881,Silence macro-to-enum for the endianness macros (#5881),1369.150,2613.547,7209.787,2476.232,1841.347,467.780,316.011,416.187,2415.504,686.920,1304.263,200.868,1441.243,1694.603,178.739,368.123,948.579 +290,aa0b371f7c,2026-10-23,5884,"Faster std::istream input: inline get-area path, binary reads, unbuffered streambufs (#5884)",1375.030,2569.362,7218.375,2484.425,1743.476,470.240,319.245,403.750,2436.034,679.759,1319.508,201.531,1443.354,1698.057,180.133,372.206,946.488 +291,86d5c56c54,2026-10-23,5886,"Speed up flatten(), unflatten(), diff() and patch() further (#5886)",1386.169,2622.331,7281.551,2495.923,1700.794,472.317,317.282,403.416,2409.097,682.507,1320.319,200.963,1444.908,1697.678,179.138,375.751,954.573 +292,dec0e9b749,2026-10-23,5883,"Write strings, scalars and indentation in dump() with fewer calls (#5883)",1383.235,2621.847,7151.412,2491.644,1732.469,473.034,211.016,288.685,2276.953,416.068,1318.490,200.574,1452.099,1701.256,180.064,372.324,960.583 +293,6fa14d8f95,2026-10-23,5885,Write binary formats through reserved sink space and number runs (#5885),1366.956,2600.914,7176.994,2465.343,1691.333,462.351,210.662,285.259,2301.553,417.589,1324.173,136.601,1429.240,1687.947,179.319,368.881,962.518 +294,0b924f5375,2026-10-23,5887,Split and print JSON pointers in one pass (#5887),1377.526,2597.394,7242.688,2464.445,1739.841,466.382,211.716,288.202,2319.771,418.288,1318.592,138.744,1441.983,1706.639,179.684,372.087,976.078 +295,e9c4fe3cdf,2026-10-24,5889,json_view: indented and ensure_ascii dumps through the fast writer (#5889),1393.007,2627.226,7248.287,2491.551,1769.642,469.976,211.665,291.327,2305.655,420.168,1319.431,139.577,1457.965,1712.927,182.274,377.741,983.284 +296,dd7686a269,2026-10-24,5888,"json_view: faster reading, indexing and C-stream parsing (#5888)",1382.444,2607.026,7161.365,2472.635,1701.277,468.438,209.963,287.564,2276.329,415.511,1311.194,137.875,1439.700,1696.646,177.624,367.131,977.802 +297,9c50bdd140,2026-10-24,5882,Make the DOM parser cheaper per container and per member (#5882),1392.673,2461.082,6068.625,2334.706,1696.950,475.550,209.313,291.776,2300.287,416.349,1317.581,138.194,1441.209,1707.720,178.751,367.339,978.031 +298,01139dc192,2026-10-24,5905,Silence an Infer false positive in json_view materialize (#5905),1381.470,2463.013,6078.010,2335.216,1709.088,475.718,211.023,291.212,2275.302,418.098,1320.441,137.572,1443.434,1696.436,175.969,365.658,975.272 +299,fe5e401870,2026-10-25,5901,Consolidate duplicated detail helpers and bodies (#5891) (#5901),1395.881,2462.765,6066.698,2327.708,1706.745,474.184,212.683,289.321,2283.842,417.657,1314.153,138.084,1442.796,1696.588,177.144,364.092,961.847 +300,3eae5680d6,2026-10-25,5902,"from_json: number-first dispatch for arithmetic types, loop for std::array (#5902)",1397.343,2477.060,6080.864,2340.781,1711.774,481.523,213.618,289.360,2289.503,417.517,1313.541,138.271,1440.822,1695.785,178.731,367.293,983.555 +301,2a56afc714,2026-10-25,5916,Fix VS 2015 build of the DOM parser (#5882) (#5916),1373.929,2476.139,6056.797,2341.890,1749.167,482.883,215.107,290.053,2292.495,417.441,1320.640,137.868,1445.227,1702.064,177.912,367.669,984.794 +302,d6431a9104,2026-10-26,5918,Throw out_of_range.411 for JSON Patch add into a null parent (#5917) (#5918),1371.635,2445.905,6017.636,2314.178,1696.447,478.134,210.996,287.397,2278.718,414.186,1291.197,137.374,1436.212,1682.197,175.790,361.130,962.070 +303,81d66291c5,2026-10-26,5358,Create objects for pointer tokens that cannot be array indices (#5358),1382.909,2465.649,6052.114,2332.556,1711.721,479.927,213.359,289.913,2289.412,417.201,1311.695,137.572,1437.168,1696.302,177.495,367.526,963.924 +304,d5da84249f,2026-10-26,5927,"Skip CBOR tags in front of map keys, validate indefinite text chunks, fix CBOR docs (#5927)",1374.553,2476.464,6076.834,2346.075,1744.224,483.375,211.423,291.148,2287.800,420.247,1320.015,137.369,1449.068,1704.785,177.459,365.004,963.908 +305,0c3570d44a,2026-10-26,5929,Validate the UBJSON/BJData container type marker for count 0; fix UBJSON docs (#5929),1381.462,2462.578,6055.183,2329.970,1713.086,484.962,210.683,290.024,2260.371,416.895,1319.093,137.782,1453.495,1706.801,177.031,361.025,962.952 +306,dc768a7d5d,2026-10-26,5930,Fix BSON binary subtype 0x02 and check the declared document size earlier (#5930),1386.856,2463.400,6054.255,2337.105,1746.441,485.425,214.508,290.954,2314.702,418.769,1325.164,139.255,1452.125,1718.313,179.005,367.327,977.054 +307,60107eda3f,2026-10-26,5931,"Read BJData ND-arrays of float16, restrict ND-array char to 0..127, correct BJData docs (#5931)",1389.051,2464.457,6049.084,2336.727,1710.473,483.159,213.007,288.990,2285.073,417.663,1317.537,137.893,1443.301,1697.126,178.706,364.051,962.202 +308,731f1b5bfb,2026-10-26,5919,"json_view: view_mode enum instead of bool Editable, node_kind for node::kind (#5919)",1381.664,2428.529,5978.713,2333.485,1746.571,479.163,211.036,288.957,2281.592,416.990,1308.904,137.486,1447.665,1691.427,175.453,363.704,963.371 +309,4cdfa6d0f4,2026-10-26,5920,json_view: no save() and load() on big-endian targets (#5920),1390.901,2477.841,6102.474,2337.925,1777.003,485.382,214.373,290.946,2303.147,421.178,1321.976,139.942,1446.726,1704.816,179.928,367.825,976.532 +310,5a2819c940,2026-10-26,5921,json_view: one SIMD macro set with the library (#5921),1393.409,2479.841,6073.011,2350.336,1785.087,485.658,214.651,292.044,2304.448,418.026,1326.212,138.942,1468.981,1719.505,179.174,368.704,982.764 +311,e5fe4ebdd2,2026-10-26,5922,json_view: from_json() of the macros reads views directly (#5922),1384.612,2467.078,6056.328,2337.309,1742.751,482.554,213.389,289.543,2299.118,417.521,1309.673,138.237,1448.628,1704.550,177.925,365.163,984.351 +312,9e67bfa115,2026-10-26,5923,json_view: the library's std conversions read views directly (#5923),1395.103,2482.517,6066.604,2350.538,1751.603,482.504,213.399,290.185,2306.188,420.406,1317.415,138.730,1444.367,1708.720,178.016,369.111,975.875 +313,21ec9bd801,2026-10-27,5915,json_view: fewer allocations when parsing small documents (#5915),1388.282,2469.118,6066.495,2340.391,1744.901,478.745,214.934,292.970,2309.264,422.842,1323.237,138.541,1454.151,1707.314,178.058,366.514,958.110 +314,2bb2feeef4,2026-10-27,5942,"Fix the red CI on develop (json_view pointer tokens, bson, from_json tests, Infer, IWYU) (#5942)",1391.981,2468.266,6068.495,2335.707,1751.527,482.908,214.285,291.291,2300.453,417.876,1328.089,138.010,1454.934,1701.845,178.250,367.182,964.917 +315,78a0687147,2026-10-27,5940,Strong exception guarantee for operator[](json_pointer) (#5940),1379.414,2467.492,6109.136,2335.309,1723.090,480.260,216.197,292.075,2313.798,415.444,1314.530,138.314,1449.629,1698.792,177.628,364.844,965.314 +316,091c10d4a5,2026-10-28,5936,Fix self-aliasing in json_pointer::operator/= and patch_inplace (#5936),1389.195,2462.409,6052.125,2321.091,1722.944,473.064,214.421,290.952,2279.997,416.589,1315.370,138.531,1437.996,1683.844,176.596,363.105,952.473 +317,54f6b3ef06,2026-10-28,5945,json_view: source positions in materialize() with JSON_DIAGNOSTIC_POSITIONS (#5945),1417.895,2496.591,6325.787,2377.105,1737.749,478.133,213.209,293.150,2304.971,422.648,1348.357,139.793,1490.556,1735.758,178.445,368.380,990.587 +318,0115bb47b3,2026-10-30,5965,Name the source and license of adapted code in the file comments (#5965),1378.289,2456.731,6043.011,2330.780,1711.965,470.960,212.371,290.798,2298.443,419.433,1323.072,137.982,1441.316,1690.457,176.197,363.182,977.928 +319,0b91f9ddd8,2026-10-30,5926,json_view: check_utf8 skips well-formed runs with the parser's string scan (#5926),1400.777,2488.449,6137.021,2359.856,1747.026,473.449,213.226,290.736,2320.524,420.950,1325.039,139.324,1452.907,1703.426,177.699,364.500,988.981 +320,ea03d601af,2026-10-30,5890,json_view: comparison without temporaries and a faster image float check (#5890),1388.958,2477.531,6127.547,2357.032,1781.238,477.111,216.144,293.938,2340.267,424.058,1337.149,139.387,1459.923,1723.919,,, +321,755bb16d7a,2026-10-30,5966,Fix the red CI on develop: remove the duplicate is_editable in basic_json_view (#5966),1411.867,2497.560,6085.938,2326.880,1726.740,480.376,212.294,292.134,2312.521,420.608,1325.345,138.544,1465.640,1744.928,177.785,367.385,992.034 +322,4fe670b5f4,2026-10-31,5969,json_view: decode chains of unicode escapes in a loop (#5969),1390.866,2466.769,6026.817,2328.995,1736.168,475.935,212.530,291.166,2284.708,418.661,1323.436,137.513,1495.099,1736.832,176.566,365.541,963.794 +323,9c349b1d7c,2026-10-31,5964,Write integers of 17 to 20 digits eight digits at a time in dump() (#5964),1390.500,2469.332,6079.698,2359.276,1718.121,470.647,209.615,289.143,2300.836,419.976,1331.637,138.488,1450.106,1703.483,176.731,365.394,953.483 +324,3fd3e0fdaa,2026-11-01,5908,json_view: dump and read canada.json-style floats faster (batched float decisions) (#5908),1366.359,2456.409,6058.422,2329.066,1713.347,470.784,209.895,289.318,2294.111,417.490,1319.403,138.100,1435.053,1698.647,176.006,363.191,954.196 +325,76001c6b4c,2026-11-01,5968,"BSON reader: find C-string terminators 8 bytes at a time, skip array element names (#5968)",1408.222,2488.159,6124.287,2363.039,1759.751,477.558,216.880,294.011,2317.898,420.892,1345.718,138.602,1460.432,1713.978,179.721,370.205,970.525 +326,1a018577cc,2026-11-01,5970,json_view: accept() checks the text without writing an index (#5970),1427.279,2506.345,6160.916,2368.009,1765.595,480.552,214.060,293.093,2341.368,419.303,1330.990,138.625,1463.731,1724.021,181.150,373.171,964.666 +327,162eda2574,2026-11-01,5971,json_view: skip the digits of a fraction 16 bytes at a time (SSE2) (#5971),1404.191,2474.144,6049.006,2363.726,1711.013,471.608,211.613,289.736,2290.230,418.673,1322.822,138.556,1441.219,1697.559,178.814,370.881,956.959 +328,6c3ab966d3,2026-11-01,5975,CBOR reader: read runs of scalar array elements in one loop (#5975),1385.800,2466.923,6050.480,2325.901,1725.552,474.248,210.034,289.350,2296.399,418.689,1327.626,137.722,1440.577,1698.622,178.627,367.797,953.174 +329,aecbef3949,2026-11-01,5976,Binary readers: swap the bytes of floats with a single byteswap (#5976),1393.659,2479.298,6092.110,2337.421,1718.218,472.539,211.337,289.638,2307.378,417.589,1324.038,137.341,1447.860,1701.387,179.160,369.448,956.324 +330,edf8d17601,2026-11-01,5980,MessagePack reader: read runs of scalar array elements in one loop (#5980),1422.081,2486.171,6157.302,2360.678,1733.503,477.472,211.189,289.309,2307.724,419.448,1334.857,138.914,1449.345,1721.126,180.127,369.693,967.370 +331,fb515ddc34,2026-11-01,5981,UBJSON/BJData readers: read optimized arrays of numbers in one loop (#5981),1387.633,2470.528,6067.657,2345.342,1721.303,476.141,212.198,288.466,2292.649,416.597,1324.486,139.598,1441.019,1705.957,179.190,367.903,959.677 +332,517444b504,2026-11-01,5978,accept() checks strings without copying them (#5978),1385.026,2453.809,5975.744,2322.357,1711.222,475.186,210.256,288.348,2282.444,415.256,1321.012,138.726,1434.772,1698.120,178.106,365.411,976.135 +333,9742edc294,2026-11-01,5979,"BSON writer: write to_bson(j) in one pass, with sizes written afterwards (#5979)",1418.816,2514.802,6091.854,2380.269,1772.646,474.067,211.598,290.653,2316.886,421.043,1346.324,139.213,1469.659,1754.493,180.269,372.201,982.753 +334,f022e3c59c,2026-11-01,5982,Binary readers and writers: faster UTF-8 checks of strings (#5982),1399.836,2474.703,6060.781,2341.409,1707.583,468.692,209.824,290.357,2290.034,418.739,1312.448,138.360,1458.779,1707.575,178.911,369.303,968.200 +335,ddc34f546a,2026-11-01,5974,json_view: exceptions name the path and the bytes of the value (#5974),1394.263,2489.906,6017.599,2345.632,1728.593,473.672,210.364,289.980,2306.608,420.394,1327.301,138.827,1448.846,1707.037,177.406,368.436,978.755 +336,b2674a4a2f,2026-11-01,5984,BSON reader: check array element names in place in strict mode (#5984),1392.028,2460.989,5975.355,2357.154,1726.291,472.389,209.872,289.219,2301.092,417.632,1309.441,138.779,1438.270,1709.943,177.580,366.368,973.214 +337,76dbe8f9c9,2026-11-02,6009,"Fix the red CI on develop: Visual Studio 2017 build of the BSON writer, Valgrind timeouts (#6009)",1387.812,2461.244,5975.843,2323.693,1713.572,469.489,209.863,289.058,2291.892,415.935,1306.729,138.322,1447.714,1694.220,177.698,363.994,972.289 +338,03d408aafa,2026-11-02,6003,JSON_DIAGNOSTIC_POSITIONS: comparing a value-initialized iterator throws instead of crashing (#6003),1385.014,2455.146,5981.995,2380.493,1732.039,466.575,209.272,289.474,2295.226,416.844,1301.454,138.016,1445.840,1703.494,176.691,365.416,967.929 +339,66e2eeeec0,2026-11-02,6000,Do not construct the base class when destroying a container (#6000),1403.795,2457.426,6001.495,2323.510,1718.268,471.022,210.474,288.385,2308.462,417.187,1313.263,138.770,1437.867,1705.586,179.168,363.523,966.701 +340,bdc737db6d,2026-11-02,5999,json_view: dump() without StringType::capacity() (#5999),1378.656,2452.954,6020.464,2339.908,1724.630,470.774,211.638,288.939,2303.773,418.311,1312.024,139.010,1446.709,1704.406,177.291,363.859,966.602 +341,494a74c242,2026-11-02,5996,"insert(): strong guarantee for single elements, basic guarantee for the rest (#5996)",1390.153,2478.991,6032.084,2342.171,1727.040,469.799,213.660,291.104,2307.193,419.623,1329.285,139.000,1461.294,1718.750,178.995,366.898,974.652 +342,bfe69c73c2,2026-11-02,5992,"json_view: get() of a boolean throws for the exact number types, as basic_json does (#5992)",1387.497,2452.207,6023.042,2335.261,1720.938,471.966,212.162,288.851,2310.949,417.260,1315.155,137.821,1448.762,1710.153,175.990,366.239,970.052 +343,ff0bdfdef3,2026-11-02,5990,Keep the byte range in exceptions about the root value (#5990),1386.358,2469.197,6037.812,2344.775,1768.382,479.285,214.375,290.939,2329.486,421.838,1332.654,138.666,1455.905,1720.376,178.637,368.500,972.955 +344,1d69ef9ab4,2026-11-02,5997,"Raise line coverage to 99.9 %: fix the measurement, remove unreachable code, add tests (#5997)",1404.481,2456.447,6166.942,2338.226,1749.981,478.338,211.609,289.387,2304.532,419.095,1321.195,140.055,1460.574,1706.842,179.067,369.688,982.029 +345,5c4f585ac2,2026-11-02,6004,"Lexer, parser, stream adapter, SAX: remove checks that invariants make dead (#6004)",1386.586,2468.772,6188.662,2373.328,1775.098,483.139,211.476,291.250,2315.874,420.854,1321.718,138.268,1464.254,1709.146,180.316,367.994,965.010 +346,100f676b3e,2026-11-02,6012,Restore the two commits of #6005 that the stack merge dropped (fixes the build of develop) (#6012),1369.597,2437.356,6122.282,2305.291,1691.485,472.217,208.716,288.666,2291.034,416.120,1300.906,137.896,1439.300,1688.769,176.641,366.389,972.368 +347,590b622d48,2026-11-02,5991,parse(): propagate std::bad_alloc instead of crashing on a half-constructed member (#5991),1377.480,2425.219,6113.438,2306.435,1716.697,474.315,209.052,288.883,2292.776,417.291,1305.336,137.989,1453.044,1704.638,179.096,368.072,978.198 +348,6d5581c4e8,2026-11-02,6008,CBOR/MessagePack readers: leave one-element arrays to the general path (#6008),1400.456,2439.163,6140.448,2328.635,1743.039,480.725,212.470,295.268,2348.332,427.202,1340.319,139.121,1489.584,1736.380,184.949,371.567,995.731 +349,b18b6fc7e6,2026-11-02,6013,Build the parser's syntax error prefix with one concat() (#6013),1370.175,2435.337,6098.834,2320.728,1726.256,472.914,210.817,289.786,2292.841,419.186,1306.593,139.277,1481.709,1714.543,177.065,366.270,971.330 +350,07876e2292,2026-11-02,6015,json_view: a value that is not found has no bytes in its exception context (#6015),1361.297,2435.980,6080.718,2305.853,1707.733,474.621,210.382,291.568,2337.276,424.783,1329.556,139.590,1450.506,1690.804,178.472,366.370,977.807 +351,baba5db36f,2026-11-02,6016,"Fix the MSVC and GCC builds of develop (C4127, -Weffc++) (#6016)",1381.280,2440.908,6116.068,2303.611,1713.472,476.121,210.492,290.105,2319.878,420.598,1318.037,139.554,1471.388,1729.097,177.078,369.621,959.145 +352,candidate,,,develop + open pull requests,1392.967,2469.204,6110.380,2348.760,1730.819,474.089,212.339,290.760,2284.428,420.179,1320.938,137.755,1441.341,1697.486,176.758,364.547,955.117 diff --git a/docs/mkdocs/scripts/figures/data/perf_usecases_mac.json b/docs/mkdocs/scripts/figures/data/perf_usecases_mac.json new file mode 100644 index 000000000..a937d3455 --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_usecases_mac.json @@ -0,0 +1,14413 @@ +{ + "validate": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 169.6, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 169.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 176.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 176.5, + "level": "full" + }, + "variants": { + "accept": { + "us": 169.6, + "level": "full" + }, + "read (reused)": { + "us": 176.5, + "level": "full" + }, + "parse": { + "us": 183.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 450.9, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 450.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 450.9, + "level": "full" + }, + "parse": { + "us": 1357.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 181.3, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 181.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 183.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 183.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 172.5, + "level": "full" + }, + "read": { + "us": 181.3, + "level": "full" + }, + "read (reused allocator)": { + "us": 183.1, + "level": "full" + }, + "insitu (copy)": { + "us": 183.6, + "level": "full" + }, + "read (raw numbers)": { + "us": 192.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 211.9, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 211.9, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 196.2, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 196.2, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 196.2, + "level": "full" + }, + "DOM": { + "us": 211.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 381.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 381.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 331.3, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 331.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 331.3, + "level": "full" + }, + "generic (double)": { + "us": 912.3, + "level": "partial" + }, + "generic (double, strict)": { + "us": 913.8, + "level": "full" + }, + "generic": { + "us": 1271.7, + "level": "partial" + }, + "generic (strict)": { + "us": 1274.5, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 534.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 534.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 533.2, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 533.2, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 533.2, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 534.8, + "level": "full" + }, + "SAX": { + "us": 535.0, + "level": "full" + }, + "parse (numbers: none)": { + "us": 859.9, + "level": "full" + }, + "parser (reused)": { + "us": 868.8, + "level": "full" + }, + "parse": { + "us": 870.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (default precision)", + "us": 1311.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 694.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1348.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1189.3, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 685.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 694.3, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 713.3, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 721.8, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1144.1, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1162.4, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1171.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1189.3, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1198.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1307.4, + "level": "full" + }, + "SAX (default precision)": { + "us": 1311.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1320.5, + "level": "full" + }, + "SAX": { + "us": 1323.5, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 1335.6, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 1347.0, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1348.2, + "level": "full" + }, + "SAX (string stream)": { + "us": 1359.5, + "level": "full" + }, + "Document": { + "us": 1360.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 451.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 353.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 353.6, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 451.8, + "level": "full" + }, + "Value": { + "us": 1637.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 325.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 325.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 325.7, + "level": "full" + }, + "IgnoredAny": { + "us": 418.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 289.0, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 289.0, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 284.6, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 284.6, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 284.6, + "level": "full" + }, + "tape (copy)": { + "us": 289.0, + "level": "full" + }, + "borrowed (copy)": { + "us": 560.5, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 312.9, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 312.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 359.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 359.4, + "level": "full" + }, + "variants": { + "accept": { + "us": 312.9, + "level": "full" + }, + "read (reused)": { + "us": 359.4, + "level": "full" + }, + "parse": { + "us": 360.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 888.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 888.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 888.0, + "level": "full" + }, + "parse": { + "us": 2406.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 476.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 476.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 480.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 480.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 450.8, + "level": "full" + }, + "insitu (copy)": { + "us": 476.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 480.0, + "level": "full" + }, + "read": { + "us": 481.1, + "level": "full" + }, + "read (raw numbers)": { + "us": 529.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 451.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 451.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 449.3, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 449.3, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 449.3, + "level": "full" + }, + "DOM": { + "us": 451.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 984.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 984.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 862.2, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 862.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 862.2, + "level": "full" + }, + "generic (double, strict)": { + "us": 1917.4, + "level": "full" + }, + "generic (double)": { + "us": 1921.0, + "level": "partial" + }, + "generic (strict)": { + "us": 2713.3, + "level": "full" + }, + "generic": { + "us": 2727.9, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 994.5, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 994.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 1019.7, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 1019.7, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 994.5, + "level": "full" + }, + "SAX (reused)": { + "us": 1019.7, + "level": "full" + }, + "SAX": { + "us": 1020.7, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1462.9, + "level": "full" + }, + "parse": { + "us": 1480.0, + "level": "full" + }, + "parser (reused)": { + "us": 1480.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 1396.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 1031.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1689.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1621.8, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream, default precision) (no encoding check)": { + "us": 1031.8, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1122.7, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1127.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1140.9, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1358.3, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 1396.9, + "level": "full" + }, + "SAX (string stream)": { + "us": 1444.8, + "level": "full" + }, + "SAX (default precision)": { + "us": 1445.3, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1545.6, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1549.8, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1569.7, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1605.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1616.2, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1621.8, + "level": "no UTF-8" + }, + "SAX": { + "us": 1639.2, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1689.7, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 1700.8, + "level": "full" + }, + "Document": { + "us": 1705.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 1102.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1046.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1046.7, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 1102.8, + "level": "full" + }, + "Value": { + "us": 2783.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 680.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 680.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 680.8, + "level": "full" + }, + "IgnoredAny": { + "us": 798.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 698.4, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 698.4, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 704.6, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 704.6, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 698.4, + "level": "full" + }, + "tape (reused)": { + "us": 704.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 1605.5, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 885.8, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 885.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 955.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 955.0, + "level": "full" + }, + "variants": { + "accept": { + "us": 885.8, + "level": "full" + }, + "read (reused)": { + "us": 955.0, + "level": "full" + }, + "parse": { + "us": 956.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 2405.4, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 2405.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 2405.4, + "level": "full" + }, + "parse": { + "us": 6000.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 1492.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 1492.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1507.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1507.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1457.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1492.5, + "level": "full" + }, + "read": { + "us": 1500.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 1507.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 1746.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1888.5, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 1888.5, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1883.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 1883.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 1883.4, + "level": "full" + }, + "DOM": { + "us": 1888.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 2577.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 2577.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1325.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1325.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1325.9, + "level": "full" + }, + "generic (double, strict)": { + "us": 5910.9, + "level": "full" + }, + "generic (double)": { + "us": 6022.0, + "level": "partial" + }, + "generic (strict)": { + "us": 9316.7, + "level": "full" + }, + "generic": { + "us": 9317.5, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 1466.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 1466.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 3098.2, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 3098.2, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 1466.8, + "level": "full" + }, + "parse (numbers: none)": { + "us": 2095.5, + "level": "full" + }, + "SAX (reused)": { + "us": 3098.2, + "level": "full" + }, + "SAX": { + "us": 3109.1, + "level": "full" + }, + "parser (reused)": { + "us": 3631.0, + "level": "full" + }, + "parse": { + "us": 3644.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 1982.0, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision)", + "us": 1982.0, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 7345.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 7345.7, + "level": "full" + }, + "variants": { + "SAX (string stream, default precision)": { + "us": 1982.0, + "level": "full" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1999.2, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 2484.0, + "level": "full" + }, + "SAX (default precision) (no encoding check)": { + "us": 2565.0, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 6261.5, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 6280.2, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 6735.5, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 6821.7, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 6857.6, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 6858.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 6980.3, + "level": "no UTF-8" + }, + "SAX": { + "us": 6996.5, + "level": "full" + }, + "Document (reused allocator)": { + "us": 7345.7, + "level": "full" + }, + "Document": { + "us": 7376.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 7399.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7446.8, + "level": "no UTF-8" + }, + "SAX (raw numbers)": { + "us": 9451.3, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 9522.8, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 1556.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1450.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1450.7, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 1556.0, + "level": "full" + }, + "Value": { + "us": 7410.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1939.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1939.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1939.1, + "level": "full" + }, + "IgnoredAny": { + "us": 2086.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 2278.5, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 2278.5, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 2260.5, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 2260.5, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 2260.5, + "level": "full" + }, + "tape (copy)": { + "us": 2278.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 4931.8, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 20873.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 20873.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 22491.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 22491.8, + "level": "full" + }, + "variants": { + "accept": { + "us": 20873.2, + "level": "full" + }, + "read (reused)": { + "us": 22491.8, + "level": "full" + }, + "parse": { + "us": 23091.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 55286.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 55286.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 55286.0, + "level": "full" + }, + "parse": { + "us": 166730.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 31498.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 31498.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 31543.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 31543.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 30239.6, + "level": "full" + }, + "insitu (copy)": { + "us": 31498.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 31543.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 31545.0, + "level": "full" + }, + "read": { + "us": 31614.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 28843.2, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 28843.2, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 28444.3, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 28444.3, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 28444.3, + "level": "full" + }, + "DOM": { + "us": 28843.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 41617.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 41617.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 45192.2, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 45192.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 45192.2, + "level": "full" + }, + "generic (double)": { + "us": 89467.3, + "level": "partial" + }, + "generic (double, strict)": { + "us": 89602.5, + "level": "full" + }, + "generic": { + "us": 131063.1, + "level": "partial" + }, + "generic (strict)": { + "us": 131198.8, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 53939.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 53939.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 54415.7, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 54415.7, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 53939.3, + "level": "full" + }, + "SAX": { + "us": 54192.5, + "level": "full" + }, + "SAX (reused)": { + "us": 54415.7, + "level": "full" + }, + "parser (reused)": { + "us": 88553.8, + "level": "full" + }, + "parse": { + "us": 90383.7, + "level": "full" + }, + "parse (numbers: none)": { + "us": 90510.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 134679.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 64733.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 156135.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 143701.0, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 63589.0, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 64733.5, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 71496.2, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 71771.5, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 134679.0, + "level": "full" + }, + "SAX (string stream)": { + "us": 134981.8, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 136366.4, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 136778.8, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 137711.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 140586.2, + "level": "full" + }, + "insitu (copy)": { + "us": 141376.9, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 143701.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 145538.5, + "level": "no UTF-8" + }, + "SAX": { + "us": 154349.1, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 154625.2, + "level": "full" + }, + "SAX (default precision)": { + "us": 155243.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 156135.2, + "level": "full" + }, + "Document": { + "us": 157729.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 46517.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 44984.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 44984.1, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 46517.3, + "level": "full" + }, + "Value": { + "us": 177841.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 31450.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 31450.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 31450.0, + "level": "full" + }, + "IgnoredAny": { + "us": 47199.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 38874.0, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 38874.0, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 38477.2, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 38477.2, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 38477.2, + "level": "full" + }, + "tape (copy)": { + "us": 38874.0, + "level": "full" + }, + "borrowed (copy)": { + "us": 59785.6, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 0.9, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 0.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 0.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 0.9, + "level": "full" + }, + "variants": { + "accept": { + "us": 0.9, + "level": "full" + }, + "read (reused)": { + "us": 0.9, + "level": "full" + }, + "parse": { + "us": 1.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 2.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 2.4, + "level": "full" + }, + "parse": { + "us": 7.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 0.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 0.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 0.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 0.9, + "level": "full" + }, + "variants": { + "read": { + "us": 0.9, + "level": "full" + }, + "insitu (copy)": { + "us": 0.9, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 0.9, + "level": "full" + }, + "read (raw numbers)": { + "us": 0.9, + "level": "full" + }, + "read (reused allocator)": { + "us": 0.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.1, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 1.1, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 0.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 0.9, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 0.9, + "level": "full" + }, + "DOM": { + "us": 1.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1.4, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1.4, + "level": "full" + }, + "generic (double)": { + "us": 4.5, + "level": "partial" + }, + "generic (double, strict)": { + "us": 4.5, + "level": "full" + }, + "generic": { + "us": 6.5, + "level": "partial" + }, + "generic (strict)": { + "us": 6.5, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 2.3, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 2.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 2.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 2.3, + "level": "full" + }, + "variants": { + "SAX": { + "us": 2.3, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 2.3, + "level": "full" + }, + "SAX (reused)": { + "us": 2.3, + "level": "full" + }, + "parser (reused)": { + "us": 3.5, + "level": "full" + }, + "parse": { + "us": 3.8, + "level": "full" + }, + "parse (numbers: none)": { + "us": 3.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (default precision)", + "us": 6.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 6.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 5.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy) (no encoding check)": { + "us": 2.6, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 2.6, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 3.0, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 3.1, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 5.2, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 5.3, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 5.4, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 5.4, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 6.0, + "level": "full" + }, + "Document (no encoding check)": { + "us": 6.0, + "level": "no UTF-8" + }, + "SAX": { + "us": 6.1, + "level": "full" + }, + "SAX (string stream)": { + "us": 6.1, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 6.1, + "level": "full" + }, + "Document (reused allocator)": { + "us": 6.2, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 6.3, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 6.4, + "level": "full" + }, + "insitu (copy)": { + "us": 6.5, + "level": "full" + }, + "Document": { + "us": 6.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.7, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2.0, + "level": "full" + }, + "Value": { + "us": 7.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1.4, + "level": "full" + }, + "IgnoredAny": { + "us": 1.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1.7, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 1.4, + "level": "full" + }, + "tape (copy)": { + "us": 1.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 3.2, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 149.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 149.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 159.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 159.6, + "level": "full" + }, + "variants": { + "accept": { + "us": 149.1, + "level": "full" + }, + "read (reused)": { + "us": 159.6, + "level": "full" + }, + "parse": { + "us": 161.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 398.8, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 398.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 398.8, + "level": "full" + }, + "parse": { + "us": 1321.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 163.5, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 163.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 161.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 161.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 154.3, + "level": "full" + }, + "read (reused allocator)": { + "us": 161.0, + "level": "full" + }, + "read": { + "us": 163.5, + "level": "full" + }, + "insitu (copy)": { + "us": 165.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 172.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 186.5, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 186.5, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 168.3, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 168.3, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 168.3, + "level": "full" + }, + "DOM": { + "us": 186.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 257.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 257.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 272.7, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 272.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 272.7, + "level": "full" + }, + "generic (double)": { + "us": 825.7, + "level": "partial" + }, + "generic (double, strict)": { + "us": 830.4, + "level": "full" + }, + "generic (strict)": { + "us": 1166.5, + "level": "full" + }, + "generic": { + "us": 1186.7, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 455.1, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 455.1, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 455.7, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 455.7, + "level": "full" + }, + "variants": { + "SAX": { + "us": 455.1, + "level": "full" + }, + "SAX (reused)": { + "us": 455.7, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 461.0, + "level": "full" + }, + "parse (numbers: none)": { + "us": 776.7, + "level": "full" + }, + "parser (reused)": { + "us": 779.3, + "level": "full" + }, + "parse": { + "us": 779.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1082.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 480.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1153.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1012.0, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 474.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 480.8, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 538.5, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 548.1, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 945.8, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 967.8, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 980.1, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1012.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1025.5, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1077.1, + "level": "full" + }, + "insitu (copy)": { + "us": 1082.7, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 1106.9, + "level": "full" + }, + "SAX (default precision)": { + "us": 1108.3, + "level": "full" + }, + "SAX (string stream)": { + "us": 1115.1, + "level": "full" + }, + "SAX": { + "us": 1133.3, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 1148.4, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1153.4, + "level": "full" + }, + "Document": { + "us": 1162.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 388.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 291.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 291.8, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 388.9, + "level": "full" + }, + "Value": { + "us": 1507.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 235.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 235.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 235.7, + "level": "full" + }, + "IgnoredAny": { + "us": 315.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 250.5, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 250.5, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 249.4, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 249.4, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 249.4, + "level": "full" + }, + "tape (copy)": { + "us": 250.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 533.5, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 193.7, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 193.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 243.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 243.8, + "level": "full" + }, + "variants": { + "accept": { + "us": 193.7, + "level": "full" + }, + "read (reused)": { + "us": 243.8, + "level": "full" + }, + "parse": { + "us": 244.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 678.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 678.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 678.0, + "level": "full" + }, + "parse": { + "us": 2314.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 284.2, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 284.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 286.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 286.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 274.6, + "level": "full" + }, + "read": { + "us": 284.2, + "level": "full" + }, + "insitu (copy)": { + "us": 284.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 286.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 347.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 332.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 332.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 325.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 325.6, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 325.6, + "level": "full" + }, + "DOM": { + "us": 332.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 552.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 552.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 470.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 470.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 470.9, + "level": "full" + }, + "generic (double)": { + "us": 1580.3, + "level": "partial" + }, + "generic (double, strict)": { + "us": 1592.4, + "level": "full" + }, + "generic": { + "us": 2359.8, + "level": "partial" + }, + "generic (strict)": { + "us": 2369.5, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 438.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 438.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 464.0, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 464.0, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 438.8, + "level": "full" + }, + "SAX": { + "us": 457.3, + "level": "full" + }, + "SAX (reused)": { + "us": 464.0, + "level": "full" + }, + "parse (numbers: none)": { + "us": 927.2, + "level": "full" + }, + "parser (reused)": { + "us": 945.5, + "level": "full" + }, + "parse": { + "us": 952.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (default precision)", + "us": 936.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 653.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1238.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1151.2, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream, default precision) (no encoding check)": { + "us": 653.3, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 744.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 754.5, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 822.4, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 869.2, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 936.3, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 970.2, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1022.5, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1038.3, + "level": "full" + }, + "insitu (copy)": { + "us": 1113.0, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1114.2, + "level": "full" + }, + "SAX": { + "us": 1126.3, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1151.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1152.5, + "level": "no UTF-8" + }, + "Document": { + "us": 1235.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1238.4, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1281.6, + "level": "no UTF-8" + }, + "SAX (raw numbers)": { + "us": 1337.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 488.2, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 471.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 471.6, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 488.2, + "level": "full" + }, + "Value": { + "us": 2265.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 380.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 380.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 380.5, + "level": "full" + }, + "IgnoredAny": { + "us": 570.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 445.1, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 445.1, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 442.8, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 442.8, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 442.8, + "level": "full" + }, + "tape (copy)": { + "us": 445.1, + "level": "full" + }, + "borrowed (copy)": { + "us": 1348.4, + "level": "full" + } + } + } + } + }, + "sum": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 224.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 224.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 223.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 223.5, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 223.5, + "level": "full" + }, + "parse": { + "us": 224.0, + "level": "full" + }, + "parse_copy": { + "us": 230.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 465.2, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 465.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 465.2, + "level": "full" + }, + "parse": { + "us": 1414.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 230.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 230.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 237.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 237.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 218.7, + "level": "full" + }, + "insitu (copy)": { + "us": 230.9, + "level": "full" + }, + "read": { + "us": 231.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 237.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 248.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 248.8, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 247.3, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 247.3, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 247.3, + "level": "full" + }, + "DOM (reused)": { + "us": 247.4, + "level": "full" + }, + "DOM": { + "us": 248.8, + "level": "full" + }, + "On-Demand": { + "us": 251.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 427.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 427.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 967.9, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 967.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 967.9, + "level": "full" + }, + "generic (double)": { + "us": 970.8, + "level": "partial" + }, + "generic": { + "us": 1318.0, + "level": "partial" + }, + "generic (strict)": { + "us": 1326.5, + "level": "full" + }, + "lazy_json": { + "us": 1955.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 535.0, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 535.0, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 532.9, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 532.9, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 532.9, + "level": "full" + }, + "SAX": { + "us": 535.0, + "level": "full" + }, + "parse": { + "us": 914.4, + "level": "full" + }, + "parser (reused)": { + "us": 915.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX", + "us": 1329.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 735.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1401.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1231.2, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 735.1, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 739.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 745.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1160.1, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1231.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1243.0, + "level": "no UTF-8" + }, + "SAX": { + "us": 1329.3, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1355.9, + "level": "full" + }, + "SAX (string stream)": { + "us": 1357.7, + "level": "full" + }, + "insitu (copy)": { + "us": 1358.5, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1401.0, + "level": "full" + }, + "Document": { + "us": 1405.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 651.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 651.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 651.5, + "level": "full" + }, + "Value": { + "us": 1689.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 363.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 363.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 363.8, + "level": "full" + }, + "Value": { + "us": 464.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 354.4, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 354.4, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 649.2, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 649.2, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 354.4, + "level": "full" + }, + "borrowed (copy)": { + "us": 645.3, + "level": "full" + }, + "borrowed (reused)": { + "us": 649.2, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 484.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 484.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 483.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 483.7, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 483.7, + "level": "full" + }, + "parse": { + "us": 484.7, + "level": "full" + }, + "parse_copy": { + "us": 512.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 925.3, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 925.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 925.3, + "level": "full" + }, + "parse": { + "us": 2535.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 581.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 581.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 587.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 587.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 550.7, + "level": "full" + }, + "insitu (copy)": { + "us": 581.2, + "level": "full" + }, + "read": { + "us": 582.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 587.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 570.8, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 570.8, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 581.8, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 581.8, + "level": "full" + }, + "variants": { + "On-Demand": { + "us": 570.8, + "level": "full" + }, + "On-Demand (reused)": { + "us": 581.8, + "level": "full" + }, + "DOM (reused)": { + "us": 587.2, + "level": "full" + }, + "DOM": { + "us": 590.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1086.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1086.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2048.8, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 2048.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 2048.8, + "level": "full" + }, + "generic (double)": { + "us": 2049.7, + "level": "partial" + }, + "generic": { + "us": 2832.0, + "level": "partial" + }, + "generic (strict)": { + "us": 2856.2, + "level": "full" + }, + "lazy_json": { + "us": 7968.5, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 1010.2, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 1010.2, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 1006.5, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 1006.5, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 1006.5, + "level": "full" + }, + "SAX": { + "us": 1010.2, + "level": "full" + }, + "parse": { + "us": 1574.8, + "level": "full" + }, + "parser (reused)": { + "us": 1576.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 1455.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 1136.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1790.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1712.6, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 1136.2, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1223.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1255.3, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1455.3, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1565.0, + "level": "no UTF-8" + }, + "SAX": { + "us": 1639.8, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1657.8, + "level": "full" + }, + "insitu (copy)": { + "us": 1670.6, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1712.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1716.0, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1790.8, + "level": "full" + }, + "Document": { + "us": 1804.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1241.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1241.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1241.8, + "level": "full" + }, + "Value": { + "us": 2921.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 777.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 777.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 777.5, + "level": "full" + }, + "Value": { + "us": 1008.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 865.8, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 865.8, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1734.3, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1734.3, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 865.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 1729.8, + "level": "full" + }, + "borrowed (reused)": { + "us": 1734.3, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1815.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1815.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1814.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1814.8, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1814.8, + "level": "full" + }, + "parse": { + "us": 1815.8, + "level": "full" + }, + "parse_copy": { + "us": 1861.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 3072.1, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 3072.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 3072.1, + "level": "full" + }, + "parse": { + "us": 6451.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1948.4, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1948.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1945.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1945.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1906.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 1945.0, + "level": "full" + }, + "read": { + "us": 1948.4, + "level": "full" + }, + "insitu (copy)": { + "us": 1958.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 2374.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 2374.0, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 2379.3, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 2379.3, + "level": "full" + }, + "variants": { + "On-Demand": { + "us": 2374.0, + "level": "full" + }, + "On-Demand (reused)": { + "us": 2379.3, + "level": "full" + }, + "DOM (reused)": { + "us": 2426.8, + "level": "full" + }, + "DOM": { + "us": 2431.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 2992.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 2992.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 6330.8, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 6330.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 6330.8, + "level": "full" + }, + "generic (double)": { + "us": 6408.4, + "level": "partial" + }, + "generic (strict)": { + "us": 9738.4, + "level": "full" + }, + "generic": { + "us": 9802.6, + "level": "partial" + }, + "lazy_json": { + "us": 12005.4, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 3066.7, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 3066.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 3067.8, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 3067.8, + "level": "full" + }, + "variants": { + "SAX": { + "us": 3066.7, + "level": "full" + }, + "SAX (reused)": { + "us": 3067.8, + "level": "full" + }, + "parser (reused)": { + "us": 4017.5, + "level": "full" + }, + "parse": { + "us": 4046.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 6453.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream)", + "us": 6453.3, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 7705.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 7705.2, + "level": "full" + }, + "variants": { + "SAX (string stream)": { + "us": 6453.3, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 6484.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 7003.9, + "level": "no UTF-8" + }, + "SAX": { + "us": 7006.7, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 7199.5, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 7201.1, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 7220.0, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 7258.3, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 7705.2, + "level": "full" + }, + "Document": { + "us": 7736.4, + "level": "full" + }, + "Document (no encoding check)": { + "us": 7768.0, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7820.7, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 4771.9, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4771.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4771.9, + "level": "full" + }, + "Value": { + "us": 7805.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 2702.9, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2702.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2702.9, + "level": "full" + }, + "Value": { + "us": 3706.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 2716.8, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 2716.8, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 5296.7, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 5296.7, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 2716.8, + "level": "full" + }, + "borrowed (reused)": { + "us": 5296.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 5347.0, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 28986.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 28986.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 29025.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 29025.1, + "level": "full" + }, + "variants": { + "parse": { + "us": 28986.8, + "level": "full" + }, + "read (reused)": { + "us": 29025.1, + "level": "full" + }, + "parse_copy": { + "us": 30541.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 64088.8, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 64088.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 64088.8, + "level": "full" + }, + "parse": { + "us": 174598.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 38250.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 38250.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 38317.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 38317.9, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 37511.6, + "level": "full" + }, + "insitu (copy)": { + "us": 38250.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 38317.9, + "level": "full" + }, + "read": { + "us": 38916.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 35111.1, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 35111.1, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 35264.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 35264.0, + "level": "full" + }, + "variants": { + "DOM": { + "us": 35111.1, + "level": "full" + }, + "DOM (reused)": { + "us": 35264.0, + "level": "full" + }, + "On-Demand (reused)": { + "us": 35698.0, + "level": "full" + }, + "On-Demand": { + "us": 35730.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 48687.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 48687.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 99763.0, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 99629.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 99629.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 99763.0, + "level": "full" + }, + "generic (strict)": { + "us": 141016.3, + "level": "full" + }, + "generic": { + "us": 141315.6, + "level": "partial" + }, + "lazy_json": { + "us": 149334.4, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 53704.2, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 53704.2, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 53956.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 53956.3, + "level": "full" + }, + "variants": { + "SAX": { + "us": 53704.2, + "level": "full" + }, + "SAX (reused)": { + "us": 53956.3, + "level": "full" + }, + "parser (reused)": { + "us": 95269.8, + "level": "full" + }, + "parse": { + "us": 96281.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 136103.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 72226.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 163157.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 149474.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 69604.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 72226.9, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 72406.0, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 136103.0, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 136834.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 145645.6, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 149474.4, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 149723.9, + "level": "full" + }, + "Document (no encoding check)": { + "us": 151254.2, + "level": "no UTF-8" + }, + "SAX": { + "us": 152317.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 163157.3, + "level": "full" + }, + "Document": { + "us": 166280.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 66567.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 66567.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 66567.5, + "level": "full" + }, + "Value": { + "us": 184407.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 41360.7, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 41360.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 41360.7, + "level": "full" + }, + "Value": { + "us": 47265.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 47518.5, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 47518.5, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 66783.5, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 66783.5, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 47518.5, + "level": "full" + }, + "borrowed (reused)": { + "us": 66783.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 66830.5, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.1, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.1, + "level": "full" + }, + "parse": { + "us": 1.2, + "level": "full" + }, + "parse_copy": { + "us": 1.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 2.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 2.4, + "level": "full" + }, + "parse": { + "us": 7.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.2, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1.1, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.1, + "level": "full" + }, + "read": { + "us": 1.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.3, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 1.3, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.2, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 1.2, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 1.2, + "level": "full" + }, + "On-Demand (reused)": { + "us": 1.2, + "level": "full" + }, + "DOM": { + "us": 1.3, + "level": "full" + }, + "On-Demand": { + "us": 1.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 4.9, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 3.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 3.5, + "level": "partial" + }, + "generic (double)": { + "us": 4.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 4.9, + "level": "full" + }, + "generic": { + "us": 6.9, + "level": "partial" + }, + "generic (strict)": { + "us": 6.9, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 2.3, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 2.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 2.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 2.3, + "level": "full" + }, + "variants": { + "SAX": { + "us": 2.3, + "level": "full" + }, + "SAX (reused)": { + "us": 2.3, + "level": "full" + }, + "parser (reused)": { + "us": 3.8, + "level": "full" + }, + "parse": { + "us": 4.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX", + "us": 6.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 6.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 5.7, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy) (no encoding check)": { + "us": 2.9, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 2.9, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 3.1, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 5.3, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 5.7, + "level": "no UTF-8" + }, + "SAX": { + "us": 6.1, + "level": "full" + }, + "SAX (string stream)": { + "us": 6.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 6.3, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 6.5, + "level": "full" + }, + "insitu (copy)": { + "us": 6.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 6.7, + "level": "full" + }, + "Document": { + "us": 7.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2.5, + "level": "full" + }, + "Value": { + "us": 7.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1.7, + "level": "full" + }, + "Value": { + "us": 2.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 2.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3.4, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3.4, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 2.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 3.4, + "level": "full" + }, + "borrowed (copy)": { + "us": 3.7, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 205.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 205.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 198.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 198.9, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 198.9, + "level": "full" + }, + "parse": { + "us": 205.0, + "level": "full" + }, + "parse_copy": { + "us": 211.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 415.3, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 415.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 415.3, + "level": "full" + }, + "parse": { + "us": 1386.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 212.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 212.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 207.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 207.3, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 199.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 207.3, + "level": "full" + }, + "insitu (copy)": { + "us": 212.2, + "level": "full" + }, + "read": { + "us": 213.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 222.1, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 222.1, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 224.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 224.0, + "level": "full" + }, + "variants": { + "DOM": { + "us": 222.1, + "level": "full" + }, + "DOM (reused)": { + "us": 224.0, + "level": "full" + }, + "On-Demand (reused)": { + "us": 231.7, + "level": "full" + }, + "On-Demand": { + "us": 232.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 303.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 303.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 886.5, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 886.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 886.5, + "level": "full" + }, + "generic (double)": { + "us": 886.8, + "level": "partial" + }, + "generic": { + "us": 1228.9, + "level": "partial" + }, + "generic (strict)": { + "us": 1231.7, + "level": "full" + }, + "lazy_json": { + "us": 1327.8, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 452.5, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 452.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 452.5, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 452.5, + "level": "full" + }, + "variants": { + "SAX": { + "us": 452.5, + "level": "full" + }, + "SAX (reused)": { + "us": 452.5, + "level": "full" + }, + "parser (reused)": { + "us": 827.1, + "level": "full" + }, + "parse": { + "us": 830.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX", + "us": 1115.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 538.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1204.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1061.2, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 522.0, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 538.9, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 557.8, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 972.0, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1061.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1067.5, + "level": "no UTF-8" + }, + "SAX": { + "us": 1115.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1123.6, + "level": "full" + }, + "insitu (copy)": { + "us": 1125.9, + "level": "full" + }, + "SAX (string stream)": { + "us": 1126.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1204.4, + "level": "full" + }, + "Document": { + "us": 1212.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 480.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 480.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 480.3, + "level": "full" + }, + "Value": { + "us": 1505.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 258.2, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 258.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 258.2, + "level": "full" + }, + "Value": { + "us": 375.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 326.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 326.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 619.1, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 619.1, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 326.2, + "level": "full" + }, + "borrowed (copy)": { + "us": 616.4, + "level": "full" + }, + "borrowed (reused)": { + "us": 619.1, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 369.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 369.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 367.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 367.1, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 367.1, + "level": "full" + }, + "parse": { + "us": 369.2, + "level": "full" + }, + "parse_copy": { + "us": 376.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 779.7, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 779.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 779.7, + "level": "full" + }, + "parse": { + "us": 2411.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 384.0, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 384.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 382.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 382.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 372.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 382.2, + "level": "full" + }, + "read": { + "us": 384.0, + "level": "full" + }, + "insitu (copy)": { + "us": 386.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 441.5, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 441.5, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 446.3, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 446.3, + "level": "full" + }, + "variants": { + "On-Demand": { + "us": 441.5, + "level": "full" + }, + "On-Demand (reused)": { + "us": 446.3, + "level": "full" + }, + "DOM (reused)": { + "us": 457.8, + "level": "full" + }, + "DOM": { + "us": 464.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 651.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 651.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 1716.8, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 1698.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 1698.8, + "level": "partial" + }, + "generic (double, strict)": { + "us": 1716.8, + "level": "full" + }, + "generic": { + "us": 2482.6, + "level": "partial" + }, + "generic (strict)": { + "us": 2514.5, + "level": "full" + }, + "lazy_json": { + "us": 2642.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 464.2, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 464.2, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 464.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 464.3, + "level": "full" + }, + "variants": { + "SAX": { + "us": 464.2, + "level": "full" + }, + "SAX (reused)": { + "us": 464.3, + "level": "full" + }, + "parse": { + "us": 1042.3, + "level": "full" + }, + "parser (reused)": { + "us": 1046.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 1055.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 848.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1338.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1254.5, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 838.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 848.7, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 860.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1038.6, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1055.3, + "level": "full" + }, + "SAX": { + "us": 1129.1, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1211.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1218.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1248.4, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1254.5, + "level": "no UTF-8" + }, + "Document": { + "us": 1321.5, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1338.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 681.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 681.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 681.8, + "level": "full" + }, + "Value": { + "us": 2423.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 526.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 526.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 526.5, + "level": "full" + }, + "Value": { + "us": 707.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 616.3, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 616.3, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1471.7, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1471.7, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 616.3, + "level": "full" + }, + "borrowed (reused)": { + "us": 1471.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1473.5, + "level": "full" + } + } + } + } + }, + "select": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 184.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 184.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 179.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 179.1, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 179.1, + "level": "full" + }, + "parse": { + "us": 184.3, + "level": "full" + }, + "structs (from_json)": { + "us": 185.2, + "level": "full" + }, + "parse_copy": { + "us": 193.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 1360.0, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 1360.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 1360.0, + "level": "full" + }, + "parse": { + "us": 1366.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 190.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 190.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 193.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 193.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 178.4, + "level": "full" + }, + "insitu (copy)": { + "us": 190.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 193.1, + "level": "full" + }, + "read": { + "us": 196.0, + "level": "full" + }, + "read (raw numbers)": { + "us": 205.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 195.7, + "level": "full" + }, + "best_any": { + "variant": "On-Demand structs", + "us": 126.6, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 194.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 137.0, + "level": "partial" + }, + "variants": { + "On-Demand structs": { + "us": 126.6, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 131.0, + "level": "partial" + }, + "On-Demand": { + "us": 135.2, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 137.0, + "level": "partial" + }, + "DOM (reused)": { + "us": 194.6, + "level": "full" + }, + "DOM": { + "us": 195.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 384.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 384.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 311.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 241.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 241.4, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 311.2, + "level": "full" + }, + "lazy_json": { + "us": 723.7, + "level": "partial" + }, + "generic (double, strict)": { + "us": 973.2, + "level": "full" + }, + "generic (double)": { + "us": 978.5, + "level": "partial" + }, + "generic": { + "us": 1326.6, + "level": "partial" + }, + "generic (strict)": { + "us": 1331.8, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 617.1, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 617.1, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 881.0, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 881.0, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 617.1, + "level": "full" + }, + "parser (reused)": { + "us": 881.0, + "level": "full" + }, + "parse": { + "us": 886.0, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1318.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 690.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1358.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1186.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 678.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 690.0, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 886.0, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1186.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1200.5, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1204.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1303.9, + "level": "full" + }, + "insitu (copy)": { + "us": 1318.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1358.1, + "level": "full" + }, + "Document": { + "us": 1362.2, + "level": "full" + }, + "Document (raw numbers)": { + "us": 1370.5, + "level": "full" + }, + "Document (string stream)": { + "us": 1431.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 479.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 410.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 410.5, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 479.5, + "level": "full" + }, + "Value": { + "us": 1660.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 332.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 332.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 332.7, + "level": "full" + }, + "structs": { + "us": 404.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 364.1, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 364.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 364.1, + "level": "full" + }, + "borrowed (copy)": { + "us": 564.7, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 362.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 362.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 361.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 361.9, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 361.9, + "level": "full" + }, + "parse": { + "us": 362.8, + "level": "full" + }, + "structs (from_json)": { + "us": 379.5, + "level": "full" + }, + "parse_copy": { + "us": 390.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 2416.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2416.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2416.3, + "level": "full" + }, + "structs (from_json)": { + "us": 2429.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 478.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 478.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 494.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 494.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 455.6, + "level": "full" + }, + "insitu (copy)": { + "us": 478.9, + "level": "full" + }, + "read": { + "us": 483.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 494.4, + "level": "full" + }, + "read (raw numbers)": { + "us": 538.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 449.8, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 354.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 447.0, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 351.9, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 351.9, + "level": "partial" + }, + "On-Demand": { + "us": 354.2, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 362.8, + "level": "partial" + }, + "On-Demand structs": { + "us": 371.1, + "level": "partial" + }, + "DOM (reused)": { + "us": 447.0, + "level": "full" + }, + "DOM": { + "us": 449.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 990.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 990.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 854.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 255.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 255.1, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 854.4, + "level": "full" + }, + "generic (double, strict)": { + "us": 1951.3, + "level": "full" + }, + "generic (double)": { + "us": 1953.0, + "level": "partial" + }, + "generic (strict)": { + "us": 2744.5, + "level": "full" + }, + "generic": { + "us": 2745.9, + "level": "partial" + }, + "lazy_json": { + "us": 5155.3, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1205.2, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1205.2, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1489.8, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1489.8, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1205.2, + "level": "full" + }, + "parser (reused)": { + "us": 1489.8, + "level": "full" + }, + "parse": { + "us": 1493.0, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1590.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1157.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1691.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1612.0, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1125.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1157.9, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1291.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1554.3, + "level": "full" + }, + "insitu (copy)": { + "us": 1590.2, + "level": "full" + }, + "Document (string stream)": { + "us": 1594.0, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1612.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1621.7, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1691.1, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1697.8, + "level": "no UTF-8" + }, + "Document": { + "us": 1704.6, + "level": "full" + }, + "Document (raw numbers)": { + "us": 1777.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 1124.6, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1084.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1084.2, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 1124.6, + "level": "full" + }, + "Value": { + "us": 2795.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 690.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 690.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 690.8, + "level": "full" + }, + "structs": { + "us": 812.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 913.8, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 913.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 913.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 1615.4, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 956.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 956.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 956.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 956.0, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 956.0, + "level": "full" + }, + "parse": { + "us": 956.4, + "level": "full" + }, + "structs (from_json)": { + "us": 962.8, + "level": "full" + }, + "parse_copy": { + "us": 999.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 6047.2, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 6047.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 6047.2, + "level": "full" + }, + "parse": { + "us": 6055.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 1484.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 1484.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1492.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1492.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1461.4, + "level": "full" + }, + "insitu (copy)": { + "us": 1484.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 1492.2, + "level": "full" + }, + "read": { + "us": 1493.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 1729.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1886.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 566.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1883.7, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 573.2, + "level": "partial" + }, + "variants": { + "On-Demand (key selectors)": { + "us": 566.2, + "level": "partial" + }, + "On-Demand": { + "us": 567.0, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 573.2, + "level": "partial" + }, + "On-Demand structs": { + "us": 697.8, + "level": "partial" + }, + "DOM (reused)": { + "us": 1883.7, + "level": "full" + }, + "DOM": { + "us": 1886.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 2585.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 2585.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 1315.8, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 313.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 313.3, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 1315.8, + "level": "full" + }, + "lazy_json": { + "us": 1993.4, + "level": "partial" + }, + "generic (double)": { + "us": 5937.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 5942.6, + "level": "full" + }, + "generic (strict)": { + "us": 9359.8, + "level": "full" + }, + "generic": { + "us": 9409.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 3650.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 3650.1, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 3669.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 3669.6, + "level": "full" + }, + "variants": { + "parse": { + "us": 3650.1, + "level": "full" + }, + "parser (reused)": { + "us": 3669.6, + "level": "full" + }, + "parse_into structs": { + "us": 3773.2, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 6776.0, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream)", + "us": 6776.0, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 7377.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 7377.9, + "level": "full" + }, + "variants": { + "Document (string stream)": { + "us": 6776.0, + "level": "full" + }, + "insitu (copy)": { + "us": 6799.9, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 6825.8, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 6857.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 6865.2, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 6872.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 7347.1, + "level": "no UTF-8" + }, + "Document": { + "us": 7358.0, + "level": "full" + }, + "Document (reused allocator)": { + "us": 7377.9, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7422.8, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 9466.5, + "level": "no UTF-8" + }, + "Document (raw numbers)": { + "us": 9559.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 1559.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1454.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1454.6, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 1559.5, + "level": "full" + }, + "Value": { + "us": 7393.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1936.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1936.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1936.4, + "level": "full" + }, + "structs": { + "us": 2073.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 2656.7, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 2656.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 2656.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 4952.7, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 24991.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 24991.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 24108.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 24108.3, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 24108.3, + "level": "full" + }, + "parse": { + "us": 24991.3, + "level": "full" + }, + "parse_copy": { + "us": 26098.8, + "level": "full" + }, + "structs (from_json)": { + "us": 30575.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 179533.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 179533.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 179533.0, + "level": "full" + }, + "structs (from_json)": { + "us": 183413.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 33002.2, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 33002.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 33930.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 33930.3, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 32514.5, + "level": "full" + }, + "read (raw numbers)": { + "us": 33002.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 33930.3, + "level": "full" + }, + "read": { + "us": 34016.8, + "level": "full" + }, + "insitu (copy)": { + "us": 34161.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 30504.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 19562.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 30308.7, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 19607.0, + "level": "partial" + }, + "variants": { + "On-Demand": { + "us": 19562.1, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 19607.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 22068.9, + "level": "partial" + }, + "On-Demand structs": { + "us": 27406.3, + "level": "partial" + }, + "DOM (reused)": { + "us": 30308.7, + "level": "full" + }, + "DOM": { + "us": 30504.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 45858.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 45858.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 46924.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 37578.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 37578.0, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 46924.4, + "level": "full" + }, + "generic (double, strict)": { + "us": 95348.5, + "level": "full" + }, + "generic (double)": { + "us": 95425.0, + "level": "partial" + }, + "lazy_json": { + "us": 98994.3, + "level": "partial" + }, + "generic (strict)": { + "us": 136975.1, + "level": "full" + }, + "generic": { + "us": 137208.3, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 67255.4, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 67255.4, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 94889.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 94889.2, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 67255.4, + "level": "full" + }, + "parse": { + "us": 94295.5, + "level": "full" + }, + "parser (reused)": { + "us": 94889.2, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 144436.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 67089.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 157473.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 145266.0, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 65624.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 67089.8, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 86510.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 141509.4, + "level": "full" + }, + "insitu (copy)": { + "us": 144436.2, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 145266.0, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 146474.4, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 147821.3, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 148806.2, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 157473.5, + "level": "full" + }, + "Document": { + "us": 161788.8, + "level": "full" + }, + "Document (raw numbers)": { + "us": 162254.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 62378.0, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 62378.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 62378.0, + "level": "full" + }, + "structs": { + "us": 69059.3, + "level": "no UTF-8" + }, + "Value": { + "us": 185477.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 40660.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 40660.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 40660.1, + "level": "full" + }, + "structs": { + "us": 53704.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 57697.4, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 57697.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 57697.4, + "level": "full" + }, + "borrowed (copy)": { + "us": 64360.8, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.0, + "level": "full" + }, + "variants": { + "parse": { + "us": 1.0, + "level": "full" + }, + "read (reused)": { + "us": 1.0, + "level": "full" + }, + "structs (from_json)": { + "us": 1.0, + "level": "full" + }, + "parse_copy": { + "us": 1.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 7.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 7.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 7.6, + "level": "full" + }, + "structs (from_json)": { + "us": 7.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.1, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1.0, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.0, + "level": "full" + }, + "read": { + "us": 1.1, + "level": "full" + }, + "insitu (copy)": { + "us": 1.1, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand structs", + "us": 0.8, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.0, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 0.8, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 0.8, + "level": "partial" + }, + "On-Demand structs": { + "us": 0.8, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 0.8, + "level": "partial" + }, + "DOM (reused)": { + "us": 1.0, + "level": "full" + }, + "On-Demand": { + "us": 1.0, + "level": "partial" + }, + "DOM": { + "us": 1.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 1.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1.2, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 1.4, + "level": "full" + }, + "lazy_json": { + "us": 1.9, + "level": "partial" + }, + "generic (double)": { + "us": 5.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 5.2, + "level": "full" + }, + "generic": { + "us": 7.2, + "level": "partial" + }, + "generic (strict)": { + "us": 7.2, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 2.7, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 2.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 3.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 3.6, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 2.7, + "level": "full" + }, + "parser (reused)": { + "us": 3.6, + "level": "full" + }, + "parse": { + "us": 3.8, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 6.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 6.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 5.5, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 2.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2.7, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 3.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 5.5, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 6.0, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 6.1, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 6.3, + "level": "full" + }, + "insitu (copy)": { + "us": 6.5, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 6.5, + "level": "full" + }, + "Document": { + "us": 6.8, + "level": "full" + }, + "Document (string stream)": { + "us": 6.8, + "level": "full" + }, + "Document (raw numbers)": { + "us": 6.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 2.3, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1.9, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 2.3, + "level": "full" + }, + "Value": { + "us": 7.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1.7, + "level": "full" + }, + "Value": { + "us": 1.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 2.1, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 2.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 2.1, + "level": "full" + }, + "borrowed (copy)": { + "us": 3.3, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 165.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 165.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 160.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 160.2, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 160.2, + "level": "full" + }, + "parse": { + "us": 165.1, + "level": "full" + }, + "structs (from_json)": { + "us": 165.5, + "level": "full" + }, + "parse_copy": { + "us": 171.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 1331.1, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 1331.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 1331.1, + "level": "full" + }, + "parse": { + "us": 1333.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 169.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 169.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 169.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 169.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 159.0, + "level": "full" + }, + "insitu (copy)": { + "us": 169.3, + "level": "full" + }, + "read (reused allocator)": { + "us": 169.7, + "level": "full" + }, + "read": { + "us": 175.3, + "level": "full" + }, + "read (raw numbers)": { + "us": 189.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 171.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand structs", + "us": 105.9, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 176.5, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 117.6, + "level": "partial" + }, + "variants": { + "On-Demand structs": { + "us": 105.9, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 115.2, + "level": "partial" + }, + "On-Demand": { + "us": 115.6, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 117.6, + "level": "partial" + }, + "DOM": { + "us": 171.2, + "level": "full" + }, + "DOM (reused)": { + "us": 176.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 261.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 261.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 264.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 216.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 216.6, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 264.0, + "level": "full" + }, + "lazy_json": { + "us": 450.2, + "level": "partial" + }, + "generic (double)": { + "us": 889.6, + "level": "partial" + }, + "generic (double, strict)": { + "us": 891.2, + "level": "full" + }, + "generic": { + "us": 1232.0, + "level": "partial" + }, + "generic (strict)": { + "us": 1234.8, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 539.9, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 539.9, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 787.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 787.9, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 539.9, + "level": "full" + }, + "parser (reused)": { + "us": 787.9, + "level": "full" + }, + "parse": { + "us": 795.6, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1090.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 485.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1161.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1026.3, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 482.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 485.6, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 666.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1026.3, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1027.3, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1046.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1082.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1090.3, + "level": "full" + }, + "Document (string stream)": { + "us": 1159.7, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1161.6, + "level": "full" + }, + "Document": { + "us": 1173.4, + "level": "full" + }, + "Document (raw numbers)": { + "us": 1188.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 411.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 327.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 327.7, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 411.5, + "level": "full" + }, + "Value": { + "us": 1484.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 242.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 242.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 242.4, + "level": "full" + }, + "structs": { + "us": 301.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 328.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 328.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 328.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 528.5, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 247.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 247.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 245.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 245.4, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 245.4, + "level": "full" + }, + "parse": { + "us": 247.1, + "level": "full" + }, + "parse_copy": { + "us": 254.4, + "level": "full" + }, + "structs (from_json)": { + "us": 262.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 2287.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2287.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2287.4, + "level": "full" + }, + "structs (from_json)": { + "us": 2293.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 284.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 284.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 289.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 289.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 277.2, + "level": "full" + }, + "insitu (copy)": { + "us": 284.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 289.0, + "level": "full" + }, + "read": { + "us": 289.3, + "level": "full" + }, + "read (raw numbers)": { + "us": 349.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 327.9, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 221.5, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 325.2, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 222.2, + "level": "partial" + }, + "variants": { + "On-Demand": { + "us": 221.5, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 222.2, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 224.7, + "level": "partial" + }, + "On-Demand structs": { + "us": 240.0, + "level": "partial" + }, + "DOM (reused)": { + "us": 325.2, + "level": "full" + }, + "DOM": { + "us": 327.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 555.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 555.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 469.6, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 129.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 129.9, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 469.6, + "level": "full" + }, + "lazy_json": { + "us": 1269.0, + "level": "partial" + }, + "generic (double)": { + "us": 1610.8, + "level": "partial" + }, + "generic (double, strict)": { + "us": 1637.5, + "level": "full" + }, + "generic (strict)": { + "us": 2376.0, + "level": "full" + }, + "generic": { + "us": 2390.6, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 691.7, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 691.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 959.3, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 959.3, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 691.7, + "level": "full" + }, + "parse": { + "us": 956.2, + "level": "full" + }, + "parser (reused)": { + "us": 959.3, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1125.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 759.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1226.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1140.9, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 748.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 759.9, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 998.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1121.1, + "level": "full" + }, + "insitu (copy)": { + "us": 1125.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1132.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1140.9, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 1152.3, + "level": "full" + }, + "Document": { + "us": 1218.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1226.4, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1381.0, + "level": "no UTF-8" + }, + "Document (raw numbers)": { + "us": 1443.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 522.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 518.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 518.3, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 522.5, + "level": "full" + }, + "Value": { + "us": 2293.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 393.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 393.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 393.9, + "level": "full" + }, + "structs": { + "us": 586.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 663.0, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 663.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 663.0, + "level": "full" + }, + "borrowed (copy)": { + "us": 1370.3, + "level": "full" + } + } + } + } + }, + "edit": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 282.8, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 282.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 282.8, + "level": "full" + }, + "editable": { + "us": 291.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 1273.0, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 1273.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 1273.0, + "level": "full" + }, + "parse": { + "us": 1617.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 439.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 439.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 426.7, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 439.6, + "level": "full" + }, + "mut copy": { + "us": 443.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 486.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 486.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 1539.1, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 1522.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 1522.3, + "level": "partial" + }, + "generic (strict)": { + "us": 1539.1, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1367.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1367.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1367.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Document", + "us": 1921.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1356.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1343.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1356.4, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1486.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1761.1, + "level": "no UTF-8" + }, + "Document": { + "us": 1921.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1932.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1938.6, + "level": "full" + }, + "Document (string stream)": { + "us": 2012.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 2008.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2008.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2008.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 633.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 633.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 633.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 948.5, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 948.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 948.5, + "level": "full" + }, + "owned (copy)": { + "us": 1369.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 559.5, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 559.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 559.5, + "level": "full" + }, + "editable (source numbers)": { + "us": 560.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2344.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2344.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2344.5, + "level": "full" + }, + "parse": { + "us": 2734.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 909.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 909.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 881.9, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 909.2, + "level": "full" + }, + "mut copy": { + "us": 911.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1223.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1223.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3235.2, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 3230.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 3230.2, + "level": "partial" + }, + "generic (strict)": { + "us": 3235.2, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1992.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1992.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1992.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2426.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2001.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1964.0, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2001.5, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2148.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2387.9, + "level": "full" + }, + "insitu (copy)": { + "us": 2426.0, + "level": "full" + }, + "Document (string stream)": { + "us": 2433.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2461.9, + "level": "no UTF-8" + }, + "Document": { + "us": 2534.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3316.2, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3316.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3316.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1256.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1256.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1256.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 2102.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 2102.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 2102.2, + "level": "full" + }, + "owned (copy)": { + "us": 2642.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 1484.0, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 1484.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 1484.0, + "level": "full" + }, + "editable": { + "us": 2764.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 8334.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 8334.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 8334.2, + "level": "full" + }, + "ordered_json": { + "us": 8408.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 3728.2, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 3728.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 3641.7, + "level": "full" + }, + "mut copy": { + "us": 3728.2, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 3747.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 5638.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 5638.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 11083.2, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 11083.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 11083.2, + "level": "full" + }, + "generic": { + "us": 11123.5, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 6572.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 6572.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 6572.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 13835.7, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream)", + "us": 13835.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 13793.7, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 13835.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 13873.8, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 13879.1, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 13892.9, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 13899.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 14435.8, + "level": "no UTF-8" + }, + "Document": { + "us": 14525.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 9666.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 9666.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 9666.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 4395.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4395.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4395.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 7654.5, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 7654.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 7654.5, + "level": "full" + }, + "owned (copy)": { + "us": 7656.5, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 57634.6, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 57634.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 57634.6, + "level": "full" + }, + "editable": { + "us": 58057.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 203232.0, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 203232.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 203232.0, + "level": "full" + }, + "parse": { + "us": 244854.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 84242.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 84242.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 84238.9, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 84242.4, + "level": "full" + }, + "mut copy": { + "us": 84575.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 62688.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 62688.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 178332.9, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 176396.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 176396.9, + "level": "partial" + }, + "generic (strict)": { + "us": 178332.9, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 155237.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 155237.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 155237.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 224246.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 145819.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 144741.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 145819.4, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 164924.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 221270.2, + "level": "full" + }, + "insitu (copy)": { + "us": 224246.6, + "level": "full" + }, + "Document (string stream)": { + "us": 224879.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 225430.5, + "level": "no UTF-8" + }, + "Document": { + "us": 240143.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 251930.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 251930.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 251930.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 140935.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 140935.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 140935.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 110693.4, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 110693.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 110693.4, + "level": "full" + }, + "owned (copy)": { + "us": 182773.4, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 1.9, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 1.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 1.9, + "level": "full" + }, + "editable (source numbers)": { + "us": 1.9, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 7.1, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 7.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 7.1, + "level": "full" + }, + "parse": { + "us": 8.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 2.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy) + mut copy": { + "us": 2.4, + "level": "full" + }, + "insitu (copy untimed) + mut copy": { + "us": 2.4, + "level": "full" + }, + "mut copy": { + "us": 2.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 2.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 2.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 8.3, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 8.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 8.3, + "level": "partial" + }, + "generic (strict)": { + "us": 8.3, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 6.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 6.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 6.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 10.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 6.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 6.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 6.6, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 7.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 9.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 10.3, + "level": "full" + }, + "insitu (copy)": { + "us": 10.4, + "level": "full" + }, + "Document": { + "us": 10.5, + "level": "full" + }, + "Document (string stream)": { + "us": 10.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 9.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 9.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 9.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 3.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 5.4, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 5.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 5.4, + "level": "full" + }, + "owned (copy)": { + "us": 7.7, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 260.5, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 260.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 260.5, + "level": "full" + }, + "editable": { + "us": 264.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 1238.4, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 1238.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 1238.4, + "level": "full" + }, + "parse": { + "us": 1570.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 410.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 410.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy) + mut copy": { + "us": 410.8, + "level": "full" + }, + "insitu (copy untimed) + mut copy": { + "us": 413.5, + "level": "full" + }, + "mut copy": { + "us": 416.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 359.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 359.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 1424.6, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 1415.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 1415.1, + "level": "partial" + }, + "generic (strict)": { + "us": 1424.6, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1268.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1268.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1268.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1685.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1129.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1123.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1129.6, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1238.1, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1575.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1682.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1685.7, + "level": "full" + }, + "Document": { + "us": 1720.0, + "level": "full" + }, + "Document (string stream)": { + "us": 1721.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 1876.8, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1876.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1876.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 539.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 539.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 539.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 913.3, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 913.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 913.3, + "level": "full" + }, + "owned (copy)": { + "us": 1350.8, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 442.6, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 442.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 442.6, + "level": "full" + }, + "editable": { + "us": 444.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2222.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2222.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2222.5, + "level": "full" + }, + "parse": { + "us": 2598.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 704.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 704.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 700.5, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 704.0, + "level": "full" + }, + "mut copy": { + "us": 712.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 774.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 774.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 2911.8, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 2897.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 2897.2, + "level": "partial" + }, + "generic (strict)": { + "us": 2911.8, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1463.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1463.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1463.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1969.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1587.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1580.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1587.5, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1824.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1948.5, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1950.3, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1969.5, + "level": "full" + }, + "Document (string stream)": { + "us": 1985.5, + "level": "full" + }, + "Document": { + "us": 2033.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 2840.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2840.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2840.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 971.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 971.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 971.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1879.4, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1879.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1879.4, + "level": "full" + }, + "owned (copy)": { + "us": 2396.3, + "level": "full" + } + } + } + } + }, + "minify": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 252.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 252.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 246.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 246.9, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 246.9, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 252.4, + "level": "full" + }, + "parse + dump": { + "us": 259.4, + "level": "full" + }, + "parse_copy + dump": { + "us": 263.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 1600.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 1600.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 1600.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 292.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 292.9, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 298.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 298.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 279.2, + "level": "full" + }, + "insitu (copy) + write": { + "us": 292.9, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 298.2, + "level": "full" + }, + "read + write": { + "us": 300.2, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 312.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 423.4, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 62.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 417.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 417.4, + "level": "full" + }, + "variants": { + "minify": { + "us": 62.3, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 417.4, + "level": "full" + }, + "DOM + to_string": { + "us": 423.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 500.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 500.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 1505.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 281.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 281.1, + "level": "partial" + }, + "generic (strict)": { + "us": 1505.4, + "level": "full" + }, + "generic": { + "us": 1518.0, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1393.2, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1393.2, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1410.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1410.6, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 1393.2, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 1410.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (raw numbers)", + "us": 1513.0, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1058.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 1995.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 1824.8, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1058.3, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1315.2, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1352.4, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 1513.0, + "level": "full" + }, + "SAX to Writer": { + "us": 1525.4, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 1575.7, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 1798.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 1824.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 1995.4, + "level": "full" + }, + "Document + Writer": { + "us": 1996.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 2004.2, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2004.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2004.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 535.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 535.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 535.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 951.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 951.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 951.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 493.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 493.3, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 492.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 492.3, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 492.3, + "level": "full" + }, + "parse + dump": { + "us": 493.3, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 493.6, + "level": "full" + }, + "parse_copy + dump": { + "us": 524.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 2706.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 2706.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 2706.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 648.2, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 648.2, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 654.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 654.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 625.2, + "level": "full" + }, + "read + write": { + "us": 648.2, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 654.2, + "level": "full" + }, + "insitu (copy) + write": { + "us": 657.3, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 720.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 848.2, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 170.9, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 881.8, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 881.8, + "level": "full" + }, + "variants": { + "minify": { + "us": 170.9, + "level": "partial" + }, + "DOM + to_string": { + "us": 848.2, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 881.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1220.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1220.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3225.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 728.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 728.8, + "level": "partial" + }, + "generic": { + "us": 3209.1, + "level": "partial" + }, + "generic (strict)": { + "us": 3225.4, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1986.5, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1986.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1982.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1982.2, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 1982.2, + "level": "full" + }, + "parse + serialize": { + "us": 1986.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 1807.7, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1485.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2519.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2449.8, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1485.1, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1718.8, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 1807.7, + "level": "full" + }, + "SAX to Writer": { + "us": 1815.2, + "level": "full" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1988.1, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 2097.4, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2449.8, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2464.5, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2519.6, + "level": "full" + }, + "Document + Writer": { + "us": 2537.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3290.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3290.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3290.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1134.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1134.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1134.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 2111.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 2111.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 2111.0, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 1359.9, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 1359.9, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 2610.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 2610.6, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 1359.9, + "level": "full" + }, + "parse + dump": { + "us": 2581.5, + "level": "full" + }, + "read + dump (reused)": { + "us": 2610.6, + "level": "full" + }, + "parse_copy + dump": { + "us": 2649.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 8388.9, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 8388.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 8388.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 2549.6, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 2549.6, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 3237.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 3237.4, + "level": "full" + }, + "variants": { + "read (raw numbers) + write": { + "us": 2549.6, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 3195.6, + "level": "full" + }, + "read + write": { + "us": 3223.1, + "level": "full" + }, + "insitu (copy) + write": { + "us": 3225.6, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 3237.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 5120.0, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 227.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 5115.5, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 5115.5, + "level": "full" + }, + "variants": { + "minify": { + "us": 227.1, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 5115.5, + "level": "full" + }, + "DOM + to_string": { + "us": 5120.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 5676.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 5676.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 11092.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1721.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1721.5, + "level": "partial" + }, + "generic (strict)": { + "us": 11092.4, + "level": "full" + }, + "generic": { + "us": 11130.8, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 6542.4, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 6542.4, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 6524.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 6524.1, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 6524.1, + "level": "full" + }, + "parse + serialize": { + "us": 6542.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (raw numbers)", + "us": 11009.0, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (raw numbers) (no encoding check)", + "us": 10908.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 14370.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 14370.9, + "level": "full" + }, + "variants": { + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 10908.5, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 11009.0, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 14370.9, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 14434.6, + "level": "no UTF-8" + }, + "Document + Writer": { + "us": 14460.5, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 14533.2, + "level": "no UTF-8" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 15103.5, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 15111.3, + "level": "full" + }, + "SAX to Writer": { + "us": 15554.3, + "level": "full" + }, + "SAX to Writer (no encoding check)": { + "us": 15716.2, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 9792.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 9792.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 9792.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 4376.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4376.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4376.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 7657.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 7657.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 7657.9, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 37817.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 37817.3, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 37523.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 37523.8, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 37523.8, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 37817.3, + "level": "full" + }, + "parse + dump": { + "us": 37882.5, + "level": "full" + }, + "parse_copy + dump": { + "us": 38976.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 197745.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 197745.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 197745.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 51134.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 51134.1, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 51533.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 51533.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 50820.6, + "level": "full" + }, + "insitu (copy) + write": { + "us": 51134.1, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 51533.2, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 51608.1, + "level": "full" + }, + "read + write": { + "us": 51801.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 61059.3, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 5761.8, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 61143.8, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 61143.8, + "level": "full" + }, + "variants": { + "minify": { + "us": 5761.8, + "level": "partial" + }, + "DOM + to_string": { + "us": 61059.3, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 61143.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 61235.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 61235.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 168854.8, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 39975.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 39975.8, + "level": "partial" + }, + "generic": { + "us": 165922.9, + "level": "partial" + }, + "generic (strict)": { + "us": 168854.8, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 154677.0, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 154677.0, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 153505.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 153505.1, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 153505.1, + "level": "full" + }, + "parse + serialize": { + "us": 154677.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 174558.2, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 123119.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 239139.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 224809.3, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 123119.2, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 166787.6, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 168330.2, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 174558.2, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 180942.4, + "level": "full" + }, + "SAX to Writer": { + "us": 181643.3, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 224809.3, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 226786.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 239139.2, + "level": "full" + }, + "Document + Writer": { + "us": 241392.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 227369.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 227369.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 227369.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 64832.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 64832.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 64832.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 108129.8, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 108129.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 108129.8, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 1.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 1.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "parse + dump": { + "us": 1.4, + "level": "full" + }, + "read + dump (reused)": { + "us": 1.4, + "level": "full" + }, + "parse_copy + dump": { + "us": 1.5, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 1.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 8.8, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 8.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 8.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 1.6, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 1.6, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 1.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 1.5, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 1.5, + "level": "full" + }, + "read + write": { + "us": 1.6, + "level": "full" + }, + "insitu (copy) + write": { + "us": 1.6, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 1.6, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 1.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 0.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 2.3, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 2.3, + "level": "full" + }, + "variants": { + "minify": { + "us": 0.3, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 2.3, + "level": "full" + }, + "DOM + to_string": { + "us": 2.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 2.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 2.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 8.1, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1.3, + "level": "partial" + }, + "generic": { + "us": 8.0, + "level": "partial" + }, + "generic (strict)": { + "us": 8.1, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 6.7, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 6.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 6.4, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 6.4, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 6.4, + "level": "full" + }, + "parse + serialize": { + "us": 6.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer", + "us": 8.1, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 5.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 10.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 9.4, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 5.0, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 7.4, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 7.5, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 8.1, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 8.1, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 8.1, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 9.4, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 9.9, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 10.2, + "level": "full" + }, + "Document + Writer": { + "us": 10.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 9.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 9.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 9.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 5.5, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 5.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 5.5, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 233.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 233.0, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 227.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 227.8, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 227.8, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 233.0, + "level": "full" + }, + "parse + dump": { + "us": 235.4, + "level": "full" + }, + "parse_copy + dump": { + "us": 244.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 1559.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 1559.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 1559.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 269.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 269.9, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 269.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 269.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 267.0, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 269.4, + "level": "full" + }, + "insitu (copy) + write": { + "us": 269.9, + "level": "full" + }, + "read + write": { + "us": 274.8, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 283.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 397.3, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 45.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 389.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 389.9, + "level": "full" + }, + "variants": { + "minify": { + "us": 45.2, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 389.9, + "level": "full" + }, + "DOM + to_string": { + "us": 397.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 367.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 367.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 1396.0, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 241.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 241.9, + "level": "partial" + }, + "generic": { + "us": 1390.0, + "level": "partial" + }, + "generic (strict)": { + "us": 1396.0, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1287.0, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1287.0, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1296.0, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1296.0, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 1287.0, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 1296.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 1340.0, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 839.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 1762.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 1618.5, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 839.7, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1231.3, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1252.0, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 1340.0, + "level": "full" + }, + "SAX to Writer": { + "us": 1353.2, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 1374.1, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 1609.3, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 1618.5, + "level": "no UTF-8" + }, + "Document + Writer": { + "us": 1762.5, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 1762.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 1864.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1864.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1864.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 457.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 457.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 457.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 923.7, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 923.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 923.7, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 376.9, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 376.9, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 374.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 374.9, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 374.9, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 376.9, + "level": "full" + }, + "parse + dump": { + "us": 377.6, + "level": "full" + }, + "parse_copy + dump": { + "us": 385.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 2564.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 2564.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 2564.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 448.9, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 448.9, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 450.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 450.9, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 445.0, + "level": "full" + }, + "read + write": { + "us": 448.9, + "level": "full" + }, + "insitu (copy) + write": { + "us": 449.2, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 450.9, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 525.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 708.1, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 48.4, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 740.5, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 740.5, + "level": "full" + }, + "variants": { + "minify": { + "us": 48.4, + "level": "partial" + }, + "DOM + to_string": { + "us": 708.1, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 740.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 767.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 767.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 2829.5, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 438.7, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 438.7, + "level": "partial" + }, + "generic": { + "us": 2825.5, + "level": "partial" + }, + "generic (strict)": { + "us": 2829.5, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1445.3, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1445.3, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1448.5, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1448.5, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 1445.3, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 1448.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer", + "us": 1457.4, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1223.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2055.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 1959.2, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1223.2, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1404.9, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 1457.4, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 1476.6, + "level": "full" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1694.9, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 1735.2, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 1959.2, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 1966.3, + "level": "no UTF-8" + }, + "Document + Writer": { + "us": 2042.3, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 2055.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 2763.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2763.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2763.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 825.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 825.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 825.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1841.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1841.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1841.2, + "level": "full" + } + } + } + } + }, + "write": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 74.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 74.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 74.3, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 74.8, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 223.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 223.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 223.3, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 102.7, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 102.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 102.7, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 199.2, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 199.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 199.2, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 602.6, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 602.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 602.6, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 108.5, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 108.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 108.5, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 216.2, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 216.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 216.2, + "level": "n/a" + }, + "generic (strict)": { + "us": 226.0, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 506.7, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 506.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 506.7, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 322.0, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 322.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 322.0, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 211.5, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 211.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 211.5, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 355.3, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 355.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 355.3, + "level": "n/a" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 133.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 133.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 133.8, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 134.2, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 287.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 287.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 287.0, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 169.4, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 169.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 169.4, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 385.1, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 385.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 385.1, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 830.3, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 830.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 830.3, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 230.2, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 230.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 230.2, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 469.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 469.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 469.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 473.3, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 507.7, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 507.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 507.7, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 490.1, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 490.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 490.1, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 446.0, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 446.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 446.0, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 478.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 478.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 478.5, + "level": "n/a" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 401.2, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 401.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 401.2, + "level": "n/a" + }, + "dump": { + "us": 1621.2, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 2275.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 2275.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 2275.8, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 1731.3, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 1731.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 1731.3, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 3241.4, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 3241.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 3241.4, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 6995.1, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 6995.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 6995.1, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 3093.4, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 3093.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 3093.4, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 1720.0, + "level": "n/a" + }, + "best_any": { + "variant": "generic (strict)", + "us": 1720.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 1720.0, + "level": "n/a" + }, + "generic": { + "us": 1720.5, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 2922.8, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 2922.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 2922.8, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 2286.1, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 2286.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2286.1, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2419.2, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 2419.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2419.2, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 2728.4, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 2728.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 2728.4, + "level": "n/a" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 14757.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 14757.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 14757.0, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 14803.2, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 31825.4, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 31825.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 31825.4, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 20087.0, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 20087.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 20087.0, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 32208.3, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 32208.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 32208.3, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 81149.7, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 81149.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 81149.7, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 19651.3, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 19651.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 19651.3, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 33933.8, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 33933.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 33933.8, + "level": "n/a" + }, + "generic (strict)": { + "us": 36934.7, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 62583.4, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 62583.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 62583.4, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 49966.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 49966.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 49966.8, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 33366.0, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 33366.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 33366.0, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 47412.2, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 47412.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 47412.2, + "level": "n/a" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 0.5, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 0.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 0.5, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 0.5, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 1.2, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 1.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 1.2, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 0.7, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 0.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 0.7, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 1.3, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 1.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 1.3, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 3.9, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 3.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 3.9, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 0.8, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 0.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 0.8, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 1.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 1.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 1.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 1.4, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 2.9, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 2.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 2.9, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 2.0, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 2.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2.0, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1.5, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 1.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1.5, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 1.8, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 1.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 1.8, + "level": "n/a" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 73.2, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 73.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 73.2, + "level": "n/a" + }, + "dump": { + "us": 73.3, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 219.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 219.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 219.0, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 100.8, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 100.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 100.8, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 198.0, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 198.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 198.0, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 592.9, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 592.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 592.9, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 104.6, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 104.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 104.6, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 210.8, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 210.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 210.8, + "level": "n/a" + }, + "generic (strict)": { + "us": 220.2, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 498.6, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 498.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 498.6, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 331.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 331.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 331.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 215.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 215.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 215.8, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 365.0, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 365.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 365.0, + "level": "n/a" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 133.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 133.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 133.8, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 134.4, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 287.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 287.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 287.3, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 172.0, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 172.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 172.0, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 386.2, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 386.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 386.2, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 826.2, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 826.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 826.2, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 225.2, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 225.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 225.2, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 474.5, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 474.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 474.5, + "level": "n/a" + }, + "generic (strict)": { + "us": 475.0, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 512.1, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 512.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 512.1, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 490.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 490.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 490.8, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 460.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 460.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 460.7, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 493.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 493.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 493.5, + "level": "n/a" + } + } + } + } + } +} diff --git a/docs/mkdocs/scripts/figures/data/perf_usecases_x86-clang.json b/docs/mkdocs/scripts/figures/data/perf_usecases_x86-clang.json new file mode 100644 index 000000000..fccea0a86 --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_usecases_x86-clang.json @@ -0,0 +1,14413 @@ +{ + "validate": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 254.6, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 254.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 297.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 297.6, + "level": "full" + }, + "variants": { + "accept": { + "us": 254.6, + "level": "full" + }, + "read (reused)": { + "us": 297.6, + "level": "full" + }, + "parse": { + "us": 304.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 658.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 658.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 658.2, + "level": "full" + }, + "parse": { + "us": 3532.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 380.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 380.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 383.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 383.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 334.0, + "level": "full" + }, + "insitu (copy)": { + "us": 380.3, + "level": "full" + }, + "read (raw numbers)": { + "us": 380.9, + "level": "full" + }, + "read": { + "us": 381.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 383.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 305.5, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 305.5, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 305.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 305.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 305.4, + "level": "full" + }, + "DOM": { + "us": 305.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 447.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 447.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 587.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 587.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 587.9, + "level": "full" + }, + "generic (double, strict)": { + "us": 2348.7, + "level": "full" + }, + "generic (double)": { + "us": 2364.0, + "level": "partial" + }, + "generic (strict)": { + "us": 3393.6, + "level": "full" + }, + "generic": { + "us": 3447.1, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 570.7, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 570.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 575.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 575.6, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 570.7, + "level": "full" + }, + "SAX": { + "us": 573.8, + "level": "full" + }, + "SAX (reused)": { + "us": 575.6, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1193.7, + "level": "full" + }, + "parser (reused)": { + "us": 1208.6, + "level": "full" + }, + "parse": { + "us": 1209.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1801.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1169.4, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2148.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1460.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1131.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1169.4, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1219.0, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1258.1, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1282.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1296.3, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1340.1, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1458.9, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1460.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1755.5, + "level": "full" + }, + "insitu (copy)": { + "us": 1801.0, + "level": "full" + }, + "SAX (default precision)": { + "us": 1964.3, + "level": "full" + }, + "SAX": { + "us": 2003.1, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2032.9, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 2103.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 2115.6, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2148.9, + "level": "full" + }, + "Document": { + "us": 2212.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 624.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 483.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 483.8, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 624.3, + "level": "full" + }, + "Value": { + "us": 3430.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 501.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 501.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 501.3, + "level": "full" + }, + "Value": { + "us": 558.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 567.2, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 567.2, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 591.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 591.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 567.2, + "level": "full" + }, + "tape (reused)": { + "us": 591.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1274.3, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 511.6, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 511.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 770.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 770.3, + "level": "full" + }, + "variants": { + "accept": { + "us": 511.6, + "level": "full" + }, + "parse": { + "us": 746.0, + "level": "full" + }, + "read (reused)": { + "us": 770.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 1389.6, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1389.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 1389.6, + "level": "full" + }, + "parse": { + "us": 5340.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 897.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 897.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1037.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1037.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 811.2, + "level": "full" + }, + "insitu (copy)": { + "us": 897.1, + "level": "full" + }, + "read (raw numbers)": { + "us": 912.7, + "level": "full" + }, + "read": { + "us": 946.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 1037.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 732.0, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 732.0, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 724.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 724.6, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 724.6, + "level": "full" + }, + "DOM": { + "us": 732.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1032.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1032.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1430.8, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1430.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1430.8, + "level": "full" + }, + "generic (double, strict)": { + "us": 3995.2, + "level": "full" + }, + "generic (double)": { + "us": 4123.3, + "level": "partial" + }, + "generic (strict)": { + "us": 6920.5, + "level": "full" + }, + "generic": { + "us": 7111.1, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 909.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 909.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 925.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 925.3, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 909.8, + "level": "full" + }, + "SAX (reused)": { + "us": 925.3, + "level": "full" + }, + "SAX": { + "us": 937.7, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1612.0, + "level": "full" + }, + "parse": { + "us": 1708.6, + "level": "full" + }, + "parser (reused)": { + "us": 1710.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (default precision)", + "us": 1970.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (default precision) (no encoding check)", + "us": 1572.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2520.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 2040.7, + "level": "no UTF-8" + }, + "variants": { + "SAX (default precision) (no encoding check)": { + "us": 1572.1, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1698.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1704.9, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1838.7, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1914.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1948.9, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 1970.9, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1994.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2040.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2101.7, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 2202.8, + "level": "full" + }, + "SAX": { + "us": 2224.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 2251.2, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2315.2, + "level": "full" + }, + "insitu (copy)": { + "us": 2350.4, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2494.1, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2520.2, + "level": "full" + }, + "Document": { + "us": 2589.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 1440.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1370.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1370.0, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 1440.0, + "level": "full" + }, + "Value": { + "us": 5622.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 969.7, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 969.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 969.7, + "level": "full" + }, + "Value": { + "us": 1192.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1429.6, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1429.6, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1442.3, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1442.3, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 1429.6, + "level": "full" + }, + "tape (reused)": { + "us": 1442.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 3462.6, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 1055.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1055.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1448.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1448.8, + "level": "full" + }, + "variants": { + "accept": { + "us": 1055.0, + "level": "full" + }, + "parse": { + "us": 1396.6, + "level": "full" + }, + "read (reused)": { + "us": 1448.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 4264.7, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 4264.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 4264.7, + "level": "full" + }, + "parse": { + "us": 11823.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 2580.3, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 2580.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 2887.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 2887.6, + "level": "full" + }, + "variants": { + "read (raw numbers)": { + "us": 2580.3, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2662.2, + "level": "full" + }, + "insitu (copy)": { + "us": 2844.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 2887.6, + "level": "full" + }, + "read": { + "us": 2966.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 3205.9, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 3205.9, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 3292.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 3292.9, + "level": "full" + }, + "variants": { + "DOM": { + "us": 3205.9, + "level": "full" + }, + "DOM (reused)": { + "us": 3292.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3143.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3143.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1867.4, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1867.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1867.4, + "level": "full" + }, + "generic (double, strict)": { + "us": 11751.4, + "level": "full" + }, + "generic (double)": { + "us": 11793.7, + "level": "partial" + }, + "generic (strict)": { + "us": 22606.9, + "level": "full" + }, + "generic": { + "us": 22721.5, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 1684.1, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 1684.1, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 5933.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 5933.1, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 1684.1, + "level": "full" + }, + "parse (numbers: none)": { + "us": 2459.5, + "level": "full" + }, + "SAX (reused)": { + "us": 5933.1, + "level": "full" + }, + "SAX": { + "us": 5979.3, + "level": "full" + }, + "parser (reused)": { + "us": 6972.4, + "level": "full" + }, + "parse": { + "us": 7150.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 4117.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 4082.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 12334.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 12334.6, + "level": "full" + }, + "variants": { + "SAX (string stream, default precision) (no encoding check)": { + "us": 4082.6, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 4117.8, + "level": "full" + }, + "SAX (default precision)": { + "us": 4594.0, + "level": "full" + }, + "SAX (default precision) (no encoding check)": { + "us": 5086.9, + "level": "no UTF-8" + }, + "SAX (raw numbers)": { + "us": 10530.4, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 10837.2, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 10851.7, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 10964.8, + "level": "no UTF-8" + }, + "SAX": { + "us": 11392.6, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 11510.7, + "level": "full" + }, + "insitu (copy)": { + "us": 11686.9, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 11721.3, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 11785.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 11843.6, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 12334.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 12422.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 12718.7, + "level": "no UTF-8" + }, + "Document": { + "us": 13030.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2406.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 2313.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 2313.5, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2406.0, + "level": "full" + }, + "Value": { + "us": 12777.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 2249.1, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 2249.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 2249.1, + "level": "full" + }, + "Value": { + "us": 3650.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 4358.8, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 4358.8, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 4188.3, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 4188.3, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 4188.3, + "level": "full" + }, + "tape (copy)": { + "us": 4358.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 9740.4, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 34729.3, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 34729.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 42999.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 42999.2, + "level": "full" + }, + "variants": { + "accept": { + "us": 34729.3, + "level": "full" + }, + "read (reused)": { + "us": 42999.2, + "level": "full" + }, + "parse": { + "us": 76775.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 71981.6, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 71981.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 71981.6, + "level": "full" + }, + "parse": { + "us": 384444.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 119584.8, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 119584.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 55858.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 55858.2, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 55858.2, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 83152.6, + "level": "full" + }, + "read (raw numbers)": { + "us": 119584.8, + "level": "full" + }, + "read": { + "us": 121327.6, + "level": "full" + }, + "insitu (copy)": { + "us": 122616.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 113452.3, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 113452.3, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 47118.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 47118.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 47118.4, + "level": "full" + }, + "DOM": { + "us": 113452.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 94884.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 94884.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 75570.8, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 75570.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 75570.8, + "level": "full" + }, + "generic (double, strict)": { + "us": 233320.9, + "level": "full" + }, + "generic (double)": { + "us": 234246.5, + "level": "partial" + }, + "generic (strict)": { + "us": 368574.7, + "level": "full" + }, + "generic": { + "us": 375564.1, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 55497.5, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 55497.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 55237.4, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 55237.4, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 55237.4, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 55497.5, + "level": "full" + }, + "SAX": { + "us": 55950.4, + "level": "full" + }, + "parser (reused)": { + "us": 126349.5, + "level": "full" + }, + "parse": { + "us": 182277.1, + "level": "full" + }, + "parse (numbers: none)": { + "us": 184971.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 234135.6, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 132912.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 275235.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 182631.7, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 131204.4, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 132912.2, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 133946.0, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 155593.3, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 163058.5, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 165538.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 167275.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 182631.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 192707.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 198914.8, + "level": "full" + }, + "insitu (copy)": { + "us": 234135.6, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 234723.4, + "level": "full" + }, + "SAX (string stream)": { + "us": 240913.1, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 242693.5, + "level": "full" + }, + "SAX": { + "us": 247972.6, + "level": "full" + }, + "SAX (default precision)": { + "us": 248281.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 275235.6, + "level": "full" + }, + "Document": { + "us": 295063.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 64719.7, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 58247.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 58247.3, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 64719.7, + "level": "full" + }, + "Value": { + "us": 389667.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 54369.2, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 54369.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 54369.2, + "level": "full" + }, + "Value": { + "us": 113483.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 207551.3, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 207551.3, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 139519.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 139519.7, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 139519.7, + "level": "full" + }, + "tape (copy)": { + "us": 207551.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 277163.2, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 1.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.3, + "level": "full" + }, + "variants": { + "accept": { + "us": 1.1, + "level": "full" + }, + "read (reused)": { + "us": 1.3, + "level": "full" + }, + "parse": { + "us": 1.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 3.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 3.5, + "level": "full" + }, + "parse": { + "us": 21.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.6, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.5, + "level": "full" + }, + "read": { + "us": 1.6, + "level": "full" + }, + "insitu (copy)": { + "us": 1.6, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 1.7, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 1.4, + "level": "full" + }, + "DOM": { + "us": 1.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 2.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 2.4, + "level": "full" + }, + "generic (double, strict)": { + "us": 9.0, + "level": "full" + }, + "generic (double)": { + "us": 9.4, + "level": "partial" + }, + "generic (strict)": { + "us": 14.6, + "level": "full" + }, + "generic": { + "us": 15.5, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 2.3, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 2.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 2.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 2.3, + "level": "full" + }, + "variants": { + "SAX": { + "us": 2.3, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 2.3, + "level": "full" + }, + "SAX (reused)": { + "us": 2.3, + "level": "full" + }, + "parser (reused)": { + "us": 5.5, + "level": "full" + }, + "parse (numbers: none)": { + "us": 5.7, + "level": "full" + }, + "parse": { + "us": 5.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 8.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 4.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 11.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy) (no encoding check)": { + "us": 4.1, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 4.1, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 4.2, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 4.2, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 6.4, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 6.6, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 6.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 7.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 8.2, + "level": "full" + }, + "insitu (copy)": { + "us": 8.3, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 9.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 9.9, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 10.5, + "level": "full" + }, + "SAX": { + "us": 10.6, + "level": "full" + }, + "SAX (default precision)": { + "us": 10.6, + "level": "full" + }, + "Document (reused allocator)": { + "us": 11.3, + "level": "full" + }, + "Document": { + "us": 11.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.9, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2.4, + "level": "full" + }, + "Value": { + "us": 12.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 1.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.8, + "level": "full" + }, + "Value": { + "us": 2.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 2.9, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 2.9, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 2.6, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 2.6, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 2.6, + "level": "full" + }, + "tape (copy)": { + "us": 2.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 5.7, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 214.6, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 214.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 252.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 252.4, + "level": "full" + }, + "variants": { + "accept": { + "us": 214.6, + "level": "full" + }, + "read (reused)": { + "us": 252.4, + "level": "full" + }, + "parse": { + "us": 256.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 580.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 580.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 580.2, + "level": "full" + }, + "parse": { + "us": 3430.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 318.3, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 318.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 318.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 318.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 282.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 318.1, + "level": "full" + }, + "read": { + "us": 318.3, + "level": "full" + }, + "insitu (copy)": { + "us": 319.5, + "level": "full" + }, + "read (raw numbers)": { + "us": 324.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 286.5, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 286.5, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 286.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 286.0, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 286.0, + "level": "full" + }, + "DOM": { + "us": 286.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 332.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 332.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 458.7, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 458.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 458.7, + "level": "full" + }, + "generic (double, strict)": { + "us": 2147.0, + "level": "full" + }, + "generic (double)": { + "us": 2147.2, + "level": "partial" + }, + "generic (strict)": { + "us": 3124.9, + "level": "full" + }, + "generic": { + "us": 3213.5, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 421.4, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 421.4, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 431.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 431.3, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 421.4, + "level": "full" + }, + "SAX (reused)": { + "us": 431.3, + "level": "full" + }, + "SAX": { + "us": 434.3, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1096.1, + "level": "full" + }, + "parser (reused)": { + "us": 1108.5, + "level": "full" + }, + "parse": { + "us": 1110.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1485.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 907.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2057.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1372.7, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 865.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 907.8, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 959.2, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 993.6, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1185.0, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1203.2, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1237.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1372.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1376.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1453.9, + "level": "full" + }, + "insitu (copy)": { + "us": 1485.9, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 1791.1, + "level": "full" + }, + "SAX (string stream)": { + "us": 1796.1, + "level": "full" + }, + "SAX (default precision)": { + "us": 1863.4, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 1893.2, + "level": "full" + }, + "SAX": { + "us": 1964.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2057.8, + "level": "full" + }, + "Document": { + "us": 2129.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 475.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 347.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 347.5, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 475.9, + "level": "full" + }, + "Value": { + "us": 3319.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 336.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 336.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 336.8, + "level": "full" + }, + "Value": { + "us": 416.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 516.9, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 516.9, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 541.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 541.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 516.9, + "level": "full" + }, + "tape (reused)": { + "us": 541.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1254.2, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 315.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 315.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 493.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 493.8, + "level": "full" + }, + "variants": { + "accept": { + "us": 315.2, + "level": "full" + }, + "read (reused)": { + "us": 493.8, + "level": "full" + }, + "parse": { + "us": 495.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 1089.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1089.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 1089.0, + "level": "full" + }, + "parse": { + "us": 4805.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 483.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 483.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 483.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 483.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 448.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 483.1, + "level": "full" + }, + "insitu (copy)": { + "us": 483.6, + "level": "full" + }, + "read": { + "us": 484.6, + "level": "full" + }, + "read (raw numbers)": { + "us": 516.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 564.9, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 564.9, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 565.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 565.0, + "level": "full" + }, + "variants": { + "DOM": { + "us": 564.9, + "level": "full" + }, + "DOM (reused)": { + "us": 565.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 678.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 678.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 651.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 651.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 651.9, + "level": "full" + }, + "generic (double, strict)": { + "us": 3245.6, + "level": "full" + }, + "generic (double)": { + "us": 3335.2, + "level": "partial" + }, + "generic (strict)": { + "us": 5945.8, + "level": "full" + }, + "generic": { + "us": 5996.0, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 526.2, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 526.2, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 579.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 579.6, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 526.2, + "level": "full" + }, + "SAX": { + "us": 578.9, + "level": "full" + }, + "SAX (reused)": { + "us": 579.6, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1309.6, + "level": "full" + }, + "parser (reused)": { + "us": 1384.3, + "level": "full" + }, + "parse": { + "us": 1385.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 1624.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (default precision) (no encoding check)", + "us": 1192.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2161.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1679.9, + "level": "no UTF-8" + }, + "variants": { + "SAX (default precision) (no encoding check)": { + "us": 1192.3, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1200.0, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1307.1, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1366.1, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1409.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1439.7, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1595.7, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 1624.3, + "level": "full" + }, + "SAX (default precision)": { + "us": 1631.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1679.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1707.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 1734.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1739.4, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1756.1, + "level": "no UTF-8" + }, + "SAX": { + "us": 1877.9, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2023.9, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2161.2, + "level": "full" + }, + "Document": { + "us": 2253.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 647.4, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 641.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 641.0, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 647.4, + "level": "full" + }, + "Value": { + "us": 5357.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 610.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 610.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 610.9, + "level": "full" + }, + "Value": { + "us": 903.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1075.7, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1075.7, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1077.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1077.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 1075.7, + "level": "full" + }, + "tape (reused)": { + "us": 1077.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 3360.4, + "level": "full" + } + } + } + } + }, + "sum": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 373.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 373.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 362.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 362.5, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 362.5, + "level": "full" + }, + "parse": { + "us": 373.8, + "level": "full" + }, + "parse_copy": { + "us": 411.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 728.1, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 728.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 728.1, + "level": "full" + }, + "parse": { + "us": 3789.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 436.8, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 436.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 442.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 442.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 399.0, + "level": "full" + }, + "read": { + "us": 436.8, + "level": "full" + }, + "insitu (copy)": { + "us": 437.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 442.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 393.6, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 393.6, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 393.3, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 393.3, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 393.3, + "level": "full" + }, + "DOM": { + "us": 393.6, + "level": "full" + }, + "On-Demand": { + "us": 570.3, + "level": "full" + }, + "On-Demand (reused)": { + "us": 576.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 501.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 501.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2427.0, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 2427.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 2427.0, + "level": "full" + }, + "generic (double)": { + "us": 2434.3, + "level": "partial" + }, + "lazy_json": { + "us": 2612.7, + "level": "partial" + }, + "generic (strict)": { + "us": 3441.4, + "level": "full" + }, + "generic": { + "us": 3466.7, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 579.5, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 579.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 580.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 580.1, + "level": "full" + }, + "variants": { + "SAX": { + "us": 579.5, + "level": "full" + }, + "SAX (reused)": { + "us": 580.1, + "level": "full" + }, + "parser (reused)": { + "us": 1270.0, + "level": "full" + }, + "parse": { + "us": 1278.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1856.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1228.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2217.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1519.6, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1186.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1228.2, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1264.6, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1351.4, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1519.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1522.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1816.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1856.0, + "level": "full" + }, + "SAX": { + "us": 2118.4, + "level": "full" + }, + "SAX (string stream)": { + "us": 2144.0, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2217.8, + "level": "full" + }, + "Document": { + "us": 2282.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1311.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1311.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1311.0, + "level": "full" + }, + "Value": { + "us": 3539.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 501.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 501.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 501.0, + "level": "full" + }, + "Value": { + "us": 813.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 681.3, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 681.3, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1417.9, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1417.9, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 681.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 1398.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 1417.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 923.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 923.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 922.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 922.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 922.6, + "level": "full" + }, + "parse": { + "us": 923.4, + "level": "full" + }, + "parse_copy": { + "us": 1039.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 1393.4, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 1393.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 1393.4, + "level": "full" + }, + "parse": { + "us": 5481.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1064.0, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1064.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1100.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1100.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 945.5, + "level": "full" + }, + "read": { + "us": 1064.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1064.9, + "level": "full" + }, + "read (reused allocator)": { + "us": 1100.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 977.4, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 977.4, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 993.2, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 993.2, + "level": "full" + }, + "variants": { + "DOM": { + "us": 977.4, + "level": "full" + }, + "DOM (reused)": { + "us": 993.2, + "level": "full" + }, + "On-Demand (reused)": { + "us": 1353.7, + "level": "full" + }, + "On-Demand": { + "us": 1379.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1175.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1175.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 3972.0, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 3972.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 3972.0, + "level": "full" + }, + "generic (double)": { + "us": 4088.2, + "level": "partial" + }, + "generic (strict)": { + "us": 6710.1, + "level": "full" + }, + "generic": { + "us": 6937.1, + "level": "partial" + }, + "lazy_json": { + "us": 11160.5, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 928.1, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 928.1, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 927.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 927.6, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 927.6, + "level": "full" + }, + "SAX": { + "us": 928.1, + "level": "full" + }, + "parser (reused)": { + "us": 1828.4, + "level": "full" + }, + "parse": { + "us": 1834.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX", + "us": 2223.6, + "level": "full" + }, + "best_any": { + "variant": "SAX (no encoding check)", + "us": 1765.4, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2557.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 2109.9, + "level": "no UTF-8" + }, + "variants": { + "SAX (no encoding check)": { + "us": 1765.4, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1809.8, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1980.0, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2101.3, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2109.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2170.8, + "level": "no UTF-8" + }, + "SAX": { + "us": 2223.6, + "level": "full" + }, + "SAX (string stream)": { + "us": 2274.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2353.5, + "level": "full" + }, + "insitu (copy)": { + "us": 2464.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2557.4, + "level": "full" + }, + "Document": { + "us": 2661.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 2287.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2287.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2287.8, + "level": "full" + }, + "Value": { + "us": 5984.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 1122.9, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1122.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1122.9, + "level": "full" + }, + "Value": { + "us": 1829.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 1649.9, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 1649.9, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3680.4, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3680.4, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 1649.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 3653.1, + "level": "full" + }, + "borrowed (reused)": { + "us": 3680.4, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 3845.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 3845.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 3733.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 3733.9, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 3733.9, + "level": "full" + }, + "parse": { + "us": 3845.5, + "level": "full" + }, + "parse_copy": { + "us": 3883.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 5428.5, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 5428.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 5428.5, + "level": "full" + }, + "parse": { + "us": 12869.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 3581.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 3581.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 3646.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 3646.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 3444.8, + "level": "full" + }, + "insitu (copy)": { + "us": 3581.5, + "level": "full" + }, + "read": { + "us": 3630.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 3646.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 4117.0, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 4117.0, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 4295.7, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 4295.7, + "level": "full" + }, + "variants": { + "DOM": { + "us": 4117.0, + "level": "full" + }, + "DOM (reused)": { + "us": 4295.7, + "level": "full" + }, + "On-Demand": { + "us": 5515.9, + "level": "full" + }, + "On-Demand (reused)": { + "us": 5686.6, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3753.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3753.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 12165.0, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 12165.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 12165.0, + "level": "full" + }, + "generic (double)": { + "us": 12375.6, + "level": "partial" + }, + "lazy_json": { + "us": 17851.2, + "level": "partial" + }, + "generic (strict)": { + "us": 23299.6, + "level": "full" + }, + "generic": { + "us": 23438.5, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 5809.0, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 5809.0, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 5919.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 5919.6, + "level": "full" + }, + "variants": { + "SAX": { + "us": 5809.0, + "level": "full" + }, + "SAX (reused)": { + "us": 5919.6, + "level": "full" + }, + "parser (reused)": { + "us": 7635.2, + "level": "full" + }, + "parse": { + "us": 7713.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 10718.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream)", + "us": 10718.9, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 13161.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 13161.2, + "level": "full" + }, + "variants": { + "SAX (string stream)": { + "us": 10718.9, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 11003.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 12044.9, + "level": "full" + }, + "insitu (copy)": { + "us": 12119.8, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 12357.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 12392.9, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 12530.2, + "level": "no UTF-8" + }, + "SAX": { + "us": 12678.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 12865.6, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 13161.2, + "level": "full" + }, + "Document": { + "us": 13275.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 13352.6, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 7126.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 7126.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 7126.8, + "level": "full" + }, + "Value": { + "us": 13663.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 4397.1, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4397.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4397.1, + "level": "full" + }, + "Value": { + "us": 7133.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 5083.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 5083.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 10643.9, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 10643.9, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 5083.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 10643.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 10771.4, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 85286.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 85286.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 51480.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 51480.2, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 51480.2, + "level": "full" + }, + "parse": { + "us": 85286.5, + "level": "full" + }, + "parse_copy": { + "us": 124656.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 89480.6, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 89480.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 89480.6, + "level": "full" + }, + "parse": { + "us": 420541.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 126975.3, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 126975.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 64457.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 64457.4, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 64457.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 88446.7, + "level": "full" + }, + "read": { + "us": 126975.3, + "level": "full" + }, + "insitu (copy)": { + "us": 129469.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 114602.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 114602.0, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 61224.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 61224.9, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 61224.9, + "level": "full" + }, + "On-Demand (reused)": { + "us": 75561.0, + "level": "full" + }, + "On-Demand": { + "us": 114602.0, + "level": "full" + }, + "DOM": { + "us": 124594.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 104583.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 104583.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 253385.3, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 196582.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 196582.3, + "level": "partial" + }, + "generic (double)": { + "us": 249603.8, + "level": "partial" + }, + "generic (double, strict)": { + "us": 253385.3, + "level": "full" + }, + "generic (strict)": { + "us": 378838.3, + "level": "full" + }, + "generic": { + "us": 387793.9, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 56773.6, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 56773.6, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 56745.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 56745.3, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 56745.3, + "level": "full" + }, + "SAX": { + "us": 56773.6, + "level": "full" + }, + "parser (reused)": { + "us": 141833.0, + "level": "full" + }, + "parse": { + "us": 198163.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 232713.0, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 135944.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 284279.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 194569.9, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 135944.9, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 136902.3, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 165525.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 174160.1, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 194569.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 200917.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 206810.9, + "level": "full" + }, + "SAX (string stream)": { + "us": 232713.0, + "level": "full" + }, + "insitu (copy)": { + "us": 250121.8, + "level": "full" + }, + "SAX": { + "us": 262578.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 284279.1, + "level": "full" + }, + "Document": { + "us": 303888.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 129497.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 129497.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 129497.0, + "level": "full" + }, + "Value": { + "us": 403258.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 59583.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 59583.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 59583.3, + "level": "full" + }, + "Value": { + "us": 139337.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 210185.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 210185.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 220283.6, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 220283.6, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 210185.2, + "level": "full" + }, + "borrowed (reused)": { + "us": 220283.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 282561.7, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.7, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.7, + "level": "full" + }, + "parse": { + "us": 1.8, + "level": "full" + }, + "parse_copy": { + "us": 1.9, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 3.9, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 3.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 3.9, + "level": "full" + }, + "parse": { + "us": 20.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.8, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 1.8, + "level": "full" + }, + "read": { + "us": 1.9, + "level": "full" + }, + "insitu (copy)": { + "us": 1.9, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 2.2, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 2.2, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 2.1, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 2.1, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 2.1, + "level": "full" + }, + "DOM": { + "us": 2.2, + "level": "full" + }, + "On-Demand (reused)": { + "us": 2.8, + "level": "full" + }, + "On-Demand": { + "us": 3.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 2.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 2.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 9.2, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 5.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 5.6, + "level": "partial" + }, + "generic (double)": { + "us": 9.1, + "level": "partial" + }, + "generic (double, strict)": { + "us": 9.2, + "level": "full" + }, + "generic (strict)": { + "us": 14.8, + "level": "full" + }, + "generic": { + "us": 14.9, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 2.4, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 2.4, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 2.4, + "level": "full" + }, + "variants": { + "SAX": { + "us": 2.4, + "level": "full" + }, + "SAX (reused)": { + "us": 2.4, + "level": "full" + }, + "parser (reused)": { + "us": 5.7, + "level": "full" + }, + "parse": { + "us": 6.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 8.5, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 4.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 11.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.7, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 4.3, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 4.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 4.4, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 6.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 8.2, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 8.5, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 8.5, + "level": "full" + }, + "SAX (string stream)": { + "us": 9.9, + "level": "full" + }, + "SAX": { + "us": 11.0, + "level": "full" + }, + "Document (reused allocator)": { + "us": 11.5, + "level": "full" + }, + "Document": { + "us": 12.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 4.6, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4.6, + "level": "full" + }, + "Value": { + "us": 13.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2.5, + "level": "full" + }, + "Value": { + "us": 3.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 3.5, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 5.8, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 5.8, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 3.5, + "level": "full" + }, + "borrowed (reused)": { + "us": 5.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 6.1, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 327.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 327.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 319.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 319.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 319.6, + "level": "full" + }, + "parse": { + "us": 327.7, + "level": "full" + }, + "parse_copy": { + "us": 352.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 707.5, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 707.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 707.5, + "level": "full" + }, + "parse": { + "us": 3767.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 375.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 375.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 376.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 376.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 348.6, + "level": "full" + }, + "insitu (copy)": { + "us": 375.4, + "level": "full" + }, + "read (reused allocator)": { + "us": 376.6, + "level": "full" + }, + "read": { + "us": 379.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 377.6, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 377.6, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 399.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 399.6, + "level": "full" + }, + "variants": { + "DOM": { + "us": 377.6, + "level": "full" + }, + "DOM (reused)": { + "us": 399.6, + "level": "full" + }, + "On-Demand": { + "us": 549.4, + "level": "full" + }, + "On-Demand (reused)": { + "us": 552.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 387.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 387.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2232.9, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 1685.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 1685.1, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2232.9, + "level": "full" + }, + "generic (double)": { + "us": 2344.0, + "level": "partial" + }, + "generic": { + "us": 3361.2, + "level": "partial" + }, + "generic (strict)": { + "us": 3365.5, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 453.3, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 453.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 445.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 445.3, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 445.3, + "level": "full" + }, + "SAX": { + "us": 453.3, + "level": "full" + }, + "parse": { + "us": 1206.1, + "level": "full" + }, + "parser (reused)": { + "us": 1211.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1547.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1004.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2123.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1443.3, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 972.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1004.7, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1019.8, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1267.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1443.3, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1497.0, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1514.1, + "level": "full" + }, + "insitu (copy)": { + "us": 1547.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 1835.9, + "level": "full" + }, + "SAX": { + "us": 2089.5, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2123.4, + "level": "full" + }, + "Document": { + "us": 2279.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1119.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1119.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1119.0, + "level": "full" + }, + "Value": { + "us": 3713.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 443.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 443.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 443.3, + "level": "full" + }, + "Value": { + "us": 684.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 635.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 635.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1433.7, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1433.7, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 635.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 1433.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1434.6, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 706.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 706.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 673.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 673.8, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 673.8, + "level": "full" + }, + "parse": { + "us": 706.0, + "level": "full" + }, + "parse_copy": { + "us": 706.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 1223.1, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 1223.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 1223.1, + "level": "full" + }, + "parse": { + "us": 5621.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 656.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 656.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 651.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 651.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 626.0, + "level": "full" + }, + "read (reused allocator)": { + "us": 651.0, + "level": "full" + }, + "insitu (copy)": { + "us": 656.3, + "level": "full" + }, + "read": { + "us": 656.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 837.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 837.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 822.5, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 822.5, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 822.5, + "level": "full" + }, + "DOM": { + "us": 837.8, + "level": "full" + }, + "On-Demand (reused)": { + "us": 1223.7, + "level": "full" + }, + "On-Demand": { + "us": 1326.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 884.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 884.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 3626.3, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 3589.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 3589.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3626.3, + "level": "full" + }, + "generic (double)": { + "us": 3886.0, + "level": "partial" + }, + "generic (strict)": { + "us": 6570.8, + "level": "full" + }, + "generic": { + "us": 6730.6, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 644.7, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 644.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 617.2, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 617.2, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 617.2, + "level": "full" + }, + "SAX": { + "us": 644.7, + "level": "full" + }, + "parse": { + "us": 1637.3, + "level": "full" + }, + "parser (reused)": { + "us": 1664.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 1926.7, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 1460.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2584.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 2008.5, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 1460.8, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1535.3, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1645.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1707.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1896.2, + "level": "full" + }, + "SAX (string stream)": { + "us": 1926.7, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2008.5, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 2047.0, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2051.3, + "level": "no UTF-8" + }, + "SAX": { + "us": 2063.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2584.1, + "level": "full" + }, + "Document": { + "us": 2605.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1259.6, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1259.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1259.6, + "level": "full" + }, + "Value": { + "us": 5376.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 840.4, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 840.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 840.4, + "level": "full" + }, + "Value": { + "us": 1438.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 1231.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 1231.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3329.6, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3329.6, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 1231.2, + "level": "full" + }, + "borrowed (reused)": { + "us": 3329.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 3447.9, + "level": "full" + } + } + } + } + }, + "select": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 320.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 320.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 315.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 315.5, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 315.5, + "level": "full" + }, + "parse": { + "us": 320.1, + "level": "full" + }, + "structs (from_json)": { + "us": 325.3, + "level": "full" + }, + "parse_copy": { + "us": 357.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 3601.5, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 3601.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 3601.5, + "level": "full" + }, + "parse": { + "us": 3660.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 386.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 386.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 390.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 390.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 351.1, + "level": "full" + }, + "insitu (copy)": { + "us": 386.1, + "level": "full" + }, + "read (reused allocator)": { + "us": 390.7, + "level": "full" + }, + "read": { + "us": 391.9, + "level": "full" + }, + "read (raw numbers)": { + "us": 394.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 316.4, + "level": "full" + }, + "best_any": { + "variant": "On-Demand structs", + "us": 181.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 316.4, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 179.5, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 179.5, + "level": "partial" + }, + "On-Demand structs": { + "us": 181.2, + "level": "partial" + }, + "On-Demand": { + "us": 181.9, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 184.7, + "level": "partial" + }, + "DOM": { + "us": 316.4, + "level": "full" + }, + "DOM (reused)": { + "us": 316.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 460.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 460.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 544.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 345.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 345.3, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 544.5, + "level": "full" + }, + "lazy_json": { + "us": 759.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2447.2, + "level": "full" + }, + "generic (double)": { + "us": 2509.0, + "level": "partial" + }, + "generic (strict)": { + "us": 3518.9, + "level": "full" + }, + "generic": { + "us": 3575.9, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 775.6, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 775.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1249.0, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1249.0, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 775.6, + "level": "full" + }, + "parse": { + "us": 1240.9, + "level": "full" + }, + "parser (reused)": { + "us": 1249.0, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1811.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1179.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2256.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1470.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1143.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1179.9, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1415.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1470.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1471.1, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1551.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1762.5, + "level": "full" + }, + "insitu (copy)": { + "us": 1811.8, + "level": "full" + }, + "Document": { + "us": 2217.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2256.3, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2277.9, + "level": "full" + }, + "Document (string stream)": { + "us": 2350.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 700.6, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 700.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 700.6, + "level": "full" + }, + "structs": { + "us": 739.3, + "level": "no UTF-8" + }, + "Value": { + "us": 3473.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 504.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 504.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 504.2, + "level": "full" + }, + "Value": { + "us": 585.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 678.8, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 678.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 678.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 1284.4, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 759.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 759.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 757.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 757.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 757.6, + "level": "full" + }, + "parse": { + "us": 759.2, + "level": "full" + }, + "structs (from_json)": { + "us": 805.3, + "level": "full" + }, + "parse_copy": { + "us": 875.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 5124.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 5124.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 5124.4, + "level": "full" + }, + "structs (from_json)": { + "us": 5196.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 897.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 897.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 939.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 939.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 787.8, + "level": "full" + }, + "insitu (copy)": { + "us": 897.9, + "level": "full" + }, + "read": { + "us": 900.4, + "level": "full" + }, + "read (raw numbers)": { + "us": 924.4, + "level": "full" + }, + "read (reused allocator)": { + "us": 939.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 730.9, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 495.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 736.0, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 495.1, + "level": "partial" + }, + "variants": { + "On-Demand": { + "us": 495.0, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 495.1, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 506.5, + "level": "partial" + }, + "On-Demand structs": { + "us": 547.5, + "level": "partial" + }, + "DOM": { + "us": 730.9, + "level": "full" + }, + "DOM (reused)": { + "us": 736.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1011.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1011.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 1368.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 418.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 418.6, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 1368.2, + "level": "full" + }, + "generic (double, strict)": { + "us": 3883.8, + "level": "full" + }, + "generic (double)": { + "us": 4072.2, + "level": "partial" + }, + "lazy_json": { + "us": 6484.7, + "level": "partial" + }, + "generic (strict)": { + "us": 6649.8, + "level": "full" + }, + "generic": { + "us": 6662.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1388.9, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1388.9, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1664.3, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1664.3, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1388.9, + "level": "full" + }, + "parser (reused)": { + "us": 1664.3, + "level": "full" + }, + "parse": { + "us": 1670.4, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2346.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1929.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2396.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1946.7, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1817.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1929.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1946.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2012.4, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2072.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2197.7, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 2224.6, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 2346.6, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2396.9, + "level": "full" + }, + "Document": { + "us": 2500.5, + "level": "full" + }, + "Document (string stream)": { + "us": 2576.9, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2668.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 1532.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1526.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1526.5, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 1532.5, + "level": "full" + }, + "Value": { + "us": 5821.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 1033.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1033.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1033.2, + "level": "full" + }, + "Value": { + "us": 1226.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 1731.1, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 1731.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 1731.1, + "level": "full" + }, + "borrowed (copy)": { + "us": 3476.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "structs (from_json)", + "us": 1390.2, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 1390.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1401.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1401.6, + "level": "full" + }, + "variants": { + "structs (from_json)": { + "us": 1390.2, + "level": "full" + }, + "parse": { + "us": 1392.0, + "level": "full" + }, + "read (reused)": { + "us": 1401.6, + "level": "full" + }, + "parse_copy": { + "us": 1581.9, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 11831.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 11831.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 11831.4, + "level": "full" + }, + "structs (from_json)": { + "us": 11838.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 2632.1, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 2632.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 2867.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 2867.8, + "level": "full" + }, + "variants": { + "read (raw numbers)": { + "us": 2632.1, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2696.2, + "level": "full" + }, + "insitu (copy)": { + "us": 2822.4, + "level": "full" + }, + "read (reused allocator)": { + "us": 2867.8, + "level": "full" + }, + "read": { + "us": 2896.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 3262.1, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 701.6, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 3285.8, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 697.1, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 697.1, + "level": "partial" + }, + "On-Demand": { + "us": 701.6, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 706.8, + "level": "partial" + }, + "On-Demand structs": { + "us": 922.0, + "level": "partial" + }, + "DOM": { + "us": 3262.1, + "level": "full" + }, + "DOM (reused)": { + "us": 3285.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3204.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3204.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 1924.3, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 444.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 444.3, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 1924.3, + "level": "full" + }, + "lazy_json": { + "us": 3153.5, + "level": "partial" + }, + "generic (double)": { + "us": 11439.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 11612.6, + "level": "full" + }, + "generic": { + "us": 22534.9, + "level": "partial" + }, + "generic (strict)": { + "us": 23212.8, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 7120.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 7120.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 7135.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 7135.6, + "level": "full" + }, + "variants": { + "parse": { + "us": 7120.7, + "level": "full" + }, + "parser (reused)": { + "us": 7135.6, + "level": "full" + }, + "parse_into structs": { + "us": 8436.7, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 11742.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 11742.5, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 12468.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 12468.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 11464.4, + "level": "full" + }, + "insitu (copy)": { + "us": 11742.5, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 11829.8, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 11889.3, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 11911.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 12131.9, + "level": "no UTF-8" + }, + "Document (raw numbers)": { + "us": 12257.6, + "level": "full" + }, + "Document (reused allocator)": { + "us": 12468.0, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 12626.5, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 12671.5, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 12686.6, + "level": "no UTF-8" + }, + "Document": { + "us": 13442.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 2529.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2402.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2402.0, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 2529.2, + "level": "full" + }, + "Value": { + "us": 13616.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 2328.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2328.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2328.5, + "level": "full" + }, + "Value": { + "us": 3907.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 5143.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 5143.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 5143.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 10672.8, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 88082.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 88082.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 51072.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 51072.8, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 51072.8, + "level": "full" + }, + "parse": { + "us": 88082.8, + "level": "full" + }, + "structs (from_json)": { + "us": 107710.0, + "level": "full" + }, + "parse_copy": { + "us": 129542.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 444210.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 444210.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 444210.1, + "level": "full" + }, + "structs (from_json)": { + "us": 450085.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 131454.5, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 131454.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 67645.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 67645.6, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 67645.6, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 92550.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 131454.5, + "level": "full" + }, + "read": { + "us": 132061.4, + "level": "full" + }, + "insitu (copy)": { + "us": 132476.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 120808.3, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 48823.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 57830.4, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 29167.2, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 29167.2, + "level": "partial" + }, + "On-Demand": { + "us": 48823.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 50711.7, + "level": "partial" + }, + "DOM (reused)": { + "us": 57830.4, + "level": "full" + }, + "On-Demand structs": { + "us": 72459.0, + "level": "partial" + }, + "DOM": { + "us": 120808.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 108244.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 108244.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 85744.7, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 66442.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 66442.3, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 85744.7, + "level": "full" + }, + "lazy_json": { + "us": 103198.3, + "level": "partial" + }, + "generic (double)": { + "us": 253056.8, + "level": "partial" + }, + "generic (double, strict)": { + "us": 253538.1, + "level": "full" + }, + "generic (strict)": { + "us": 395135.3, + "level": "full" + }, + "generic": { + "us": 400960.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 97680.7, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 97680.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 140679.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 140679.2, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 97680.7, + "level": "full" + }, + "parser (reused)": { + "us": 140679.2, + "level": "full" + }, + "parse": { + "us": 199764.5, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 246084.7, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 173298.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 287964.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 198838.2, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 142851.9, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 173298.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 185761.4, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 198545.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 198838.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 203308.5, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 209290.0, + "level": "full" + }, + "insitu (copy)": { + "us": 246084.7, + "level": "full" + }, + "Document (string stream)": { + "us": 267647.7, + "level": "full" + }, + "Document (reused allocator)": { + "us": 287964.9, + "level": "full" + }, + "Document (raw numbers)": { + "us": 290589.9, + "level": "full" + }, + "Document": { + "us": 302957.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 107315.7, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 107315.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 107315.7, + "level": "full" + }, + "structs": { + "us": 134637.9, + "level": "no UTF-8" + }, + "Value": { + "us": 410661.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 90485.8, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 90485.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 90485.8, + "level": "full" + }, + "Value": { + "us": 130216.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 239164.4, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 239164.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 239164.4, + "level": "full" + }, + "borrowed (copy)": { + "us": 293642.8, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.5, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.5, + "level": "full" + }, + "parse": { + "us": 1.6, + "level": "full" + }, + "structs (from_json)": { + "us": 1.6, + "level": "full" + }, + "parse_copy": { + "us": 1.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 20.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 20.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 20.2, + "level": "full" + }, + "structs (from_json)": { + "us": 20.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.6, + "level": "full" + }, + "read": { + "us": 1.7, + "level": "full" + }, + "insitu (copy)": { + "us": 1.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.9, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 1.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 1.0, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 1.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 1.1, + "level": "partial" + }, + "On-Demand": { + "us": 1.2, + "level": "partial" + }, + "On-Demand structs": { + "us": 1.2, + "level": "partial" + }, + "DOM (reused)": { + "us": 1.6, + "level": "full" + }, + "DOM": { + "us": 1.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 2.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1.6, + "level": "partial" + }, + "lazy_json": { + "us": 2.0, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 2.2, + "level": "full" + }, + "generic (double)": { + "us": 9.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 10.0, + "level": "full" + }, + "generic (strict)": { + "us": 15.6, + "level": "full" + }, + "generic": { + "us": 15.7, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 3.2, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 3.2, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 5.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 5.6, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 3.2, + "level": "full" + }, + "parser (reused)": { + "us": 5.6, + "level": "full" + }, + "parse": { + "us": 5.8, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 8.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 4.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 11.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.5, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 4.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 4.2, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 5.2, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.5, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 7.8, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 8.0, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 8.2, + "level": "full" + }, + "insitu (copy)": { + "us": 8.3, + "level": "full" + }, + "Document (string stream)": { + "us": 10.7, + "level": "full" + }, + "Document (reused allocator)": { + "us": 11.4, + "level": "full" + }, + "Document": { + "us": 11.7, + "level": "full" + }, + "Document (raw numbers)": { + "us": 11.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 3.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 3.0, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 3.0, + "level": "full" + }, + "Value": { + "us": 13.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2.0, + "level": "full" + }, + "Value": { + "us": 2.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 3.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 3.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 5.9, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 273.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 273.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 267.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 267.0, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 267.0, + "level": "full" + }, + "parse": { + "us": 273.2, + "level": "full" + }, + "structs (from_json)": { + "us": 275.8, + "level": "full" + }, + "parse_copy": { + "us": 302.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 3454.7, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 3454.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 3454.7, + "level": "full" + }, + "parse": { + "us": 3460.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 326.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 326.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 328.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 328.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 297.0, + "level": "full" + }, + "insitu (copy)": { + "us": 326.0, + "level": "full" + }, + "read": { + "us": 326.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 328.4, + "level": "full" + }, + "read (raw numbers)": { + "us": 335.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 298.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand structs", + "us": 159.7, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 297.4, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 158.3, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 158.3, + "level": "partial" + }, + "On-Demand structs": { + "us": 159.7, + "level": "partial" + }, + "On-Demand": { + "us": 161.6, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 163.8, + "level": "partial" + }, + "DOM (reused)": { + "us": 297.4, + "level": "full" + }, + "DOM": { + "us": 298.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 344.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 344.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 439.8, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 295.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 295.1, + "level": "partial" + }, + "lazy_json": { + "us": 416.1, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 439.8, + "level": "full" + }, + "generic (double, strict)": { + "us": 2279.6, + "level": "full" + }, + "generic (double)": { + "us": 2285.3, + "level": "partial" + }, + "generic (strict)": { + "us": 3278.9, + "level": "full" + }, + "generic": { + "us": 3326.3, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 661.7, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 661.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1136.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1136.2, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 661.7, + "level": "full" + }, + "parser (reused)": { + "us": 1136.2, + "level": "full" + }, + "parse": { + "us": 1137.0, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1496.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 914.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2068.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1382.9, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 885.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 914.6, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1176.6, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1382.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1386.4, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1410.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1466.8, + "level": "full" + }, + "insitu (copy)": { + "us": 1496.0, + "level": "full" + }, + "Document (string stream)": { + "us": 1950.3, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2068.6, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2095.3, + "level": "full" + }, + "Document": { + "us": 2147.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 540.9, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 540.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 540.9, + "level": "full" + }, + "structs": { + "us": 579.6, + "level": "no UTF-8" + }, + "Value": { + "us": 3279.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 371.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 371.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 371.4, + "level": "full" + }, + "Value": { + "us": 445.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 649.2, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 649.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 649.2, + "level": "full" + }, + "borrowed (copy)": { + "us": 1242.3, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 535.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 535.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 509.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 509.8, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 509.8, + "level": "full" + }, + "parse": { + "us": 535.4, + "level": "full" + }, + "structs (from_json)": { + "us": 560.2, + "level": "full" + }, + "parse_copy": { + "us": 568.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 5307.8, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 5307.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 5307.8, + "level": "full" + }, + "parse": { + "us": 5338.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 490.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 490.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 503.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 503.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 457.9, + "level": "full" + }, + "insitu (copy)": { + "us": 490.7, + "level": "full" + }, + "read": { + "us": 500.9, + "level": "full" + }, + "read (reused allocator)": { + "us": 503.2, + "level": "full" + }, + "read (raw numbers)": { + "us": 538.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 577.7, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 323.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 603.0, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 322.7, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 322.7, + "level": "partial" + }, + "On-Demand": { + "us": 323.1, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 346.5, + "level": "partial" + }, + "On-Demand structs": { + "us": 376.1, + "level": "partial" + }, + "DOM": { + "us": 577.7, + "level": "full" + }, + "DOM (reused)": { + "us": 603.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 719.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 719.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 731.3, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 211.7, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 211.7, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 731.3, + "level": "full" + }, + "lazy_json": { + "us": 1509.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3714.3, + "level": "full" + }, + "generic (double)": { + "us": 3756.2, + "level": "partial" + }, + "generic": { + "us": 6712.3, + "level": "partial" + }, + "generic (strict)": { + "us": 6747.3, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1225.7, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1225.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1449.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1449.9, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1225.7, + "level": "full" + }, + "parser (reused)": { + "us": 1449.9, + "level": "full" + }, + "parse": { + "us": 1487.9, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1899.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1555.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2422.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1792.5, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1506.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1555.3, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1766.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1792.5, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1868.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1899.4, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1920.0, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 2206.0, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 2212.9, + "level": "full" + }, + "Document (reused allocator)": { + "us": 2422.6, + "level": "full" + }, + "Document": { + "us": 2468.0, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2693.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 694.6, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 694.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 694.6, + "level": "full" + }, + "structs": { + "us": 726.2, + "level": "no UTF-8" + }, + "Value": { + "us": 4784.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 653.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 653.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 653.4, + "level": "full" + }, + "Value": { + "us": 836.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 1327.6, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 1327.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 1327.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 3067.6, + "level": "full" + } + } + } + } + }, + "edit": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 526.0, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 526.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 526.0, + "level": "full" + }, + "editable (source numbers)": { + "us": 565.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 3069.2, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 3069.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 3069.2, + "level": "full" + }, + "parse": { + "us": 4420.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 917.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 917.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy) + mut copy": { + "us": 917.8, + "level": "full" + }, + "insitu (copy untimed) + mut copy": { + "us": 932.4, + "level": "full" + }, + "mut copy": { + "us": 940.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 711.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 711.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 4340.8, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 4301.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 4301.2, + "level": "partial" + }, + "generic (strict)": { + "us": 4340.8, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1854.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1854.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1854.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2634.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2029.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1951.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2029.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2052.9, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2248.2, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 2634.9, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2686.7, + "level": "full" + }, + "Document": { + "us": 3020.8, + "level": "full" + }, + "Document (string stream)": { + "us": 3126.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4041.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4041.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4041.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1196.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1196.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1196.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1862.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1862.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1862.2, + "level": "full" + }, + "owned (copy)": { + "us": 2560.0, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 1126.7, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 1126.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 1126.7, + "level": "full" + }, + "editable (source numbers)": { + "us": 1126.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 4905.2, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 4905.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 4905.2, + "level": "full" + }, + "parse": { + "us": 5726.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 1659.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 1659.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 1547.7, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 1659.2, + "level": "full" + }, + "mut copy": { + "us": 1661.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1472.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1472.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 7321.5, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 7321.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 7321.5, + "level": "full" + }, + "generic": { + "us": 7435.9, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 2596.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2596.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2596.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 3225.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2838.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 2728.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2838.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2897.4, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2972.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 3103.2, + "level": "full" + }, + "insitu (copy)": { + "us": 3225.3, + "level": "full" + }, + "Document": { + "us": 3401.8, + "level": "full" + }, + "Document (string stream)": { + "us": 3507.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 6586.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6586.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6586.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2388.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2388.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2388.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 4193.6, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 4193.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 4193.6, + "level": "full" + }, + "owned (copy)": { + "us": 4989.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 2442.9, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 2442.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 2442.9, + "level": "full" + }, + "editable": { + "us": 5674.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 16701.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 16701.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 16701.8, + "level": "full" + }, + "ordered_json": { + "us": 16785.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 7232.6, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 7232.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 7155.1, + "level": "full" + }, + "mut copy": { + "us": 7232.6, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 7340.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 7995.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 7995.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 26786.5, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 26786.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 26786.5, + "level": "full" + }, + "generic": { + "us": 26840.5, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 12765.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 12765.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 12765.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 21307.0, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 21154.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed)": { + "us": 21138.8, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 21154.4, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 21195.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 21200.9, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 21307.0, + "level": "full" + }, + "insitu (copy)": { + "us": 21413.9, + "level": "full" + }, + "Document (no encoding check)": { + "us": 21695.3, + "level": "no UTF-8" + }, + "Document": { + "us": 22289.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 16630.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 16630.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 16630.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 7743.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 7743.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 7743.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "owned (copy)", + "us": 14895.5, + "level": "full" + }, + "best_any": { + "variant": "owned (copy)", + "us": 14895.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "owned (copy)": { + "us": 14895.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 14942.9, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 196369.6, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 196369.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 196369.6, + "level": "full" + }, + "editable (source numbers)": { + "us": 200396.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 666261.1, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 666261.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 666261.1, + "level": "full" + }, + "parse": { + "us": 901257.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 316649.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 316649.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 270654.0, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 316649.7, + "level": "full" + }, + "mut copy": { + "us": 328034.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 183852.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 183852.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 725880.6, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 725880.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 725880.6, + "level": "full" + }, + "generic": { + "us": 783351.6, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 350286.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 350286.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 350286.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 386367.0, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 299765.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 267080.6, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 299765.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 310314.1, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 324206.5, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 333912.8, + "level": "full" + }, + "insitu (copy)": { + "us": 386367.0, + "level": "full" + }, + "Document (string stream)": { + "us": 389205.3, + "level": "full" + }, + "Document": { + "us": 422735.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 632766.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 632766.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 632766.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 390951.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 390951.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 390951.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 391369.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 391369.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 391369.2, + "level": "full" + }, + "owned (copy)": { + "us": 574174.1, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 2.9, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 2.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 2.9, + "level": "full" + }, + "editable (source numbers)": { + "us": 2.9, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 13.1, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 13.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 13.1, + "level": "full" + }, + "parse": { + "us": 22.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 3.9, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 3.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "mut copy": { + "us": 3.9, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 3.9, + "level": "full" + }, + "insitu (copy untimed) + mut copy": { + "us": 3.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 18.3, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 17.7, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 17.7, + "level": "partial" + }, + "generic (strict)": { + "us": 18.3, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 8.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 8.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 8.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 11.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 7.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy) (no encoding check)": { + "us": 7.7, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 7.7, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 8.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 11.4, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 11.8, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 12.0, + "level": "full" + }, + "Document (string stream)": { + "us": 14.3, + "level": "full" + }, + "Document": { + "us": 15.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 17.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 17.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 17.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 6.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 9.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 9.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 9.0, + "level": "full" + }, + "owned (copy)": { + "us": 13.1, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 468.1, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 468.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 468.1, + "level": "full" + }, + "editable (source numbers)": { + "us": 468.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2652.4, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2652.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2652.4, + "level": "full" + }, + "parse": { + "us": 3903.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 810.2, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 810.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 732.8, + "level": "full" + }, + "mut copy": { + "us": 810.2, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 812.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 522.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 522.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3683.7, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 3683.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 3683.7, + "level": "full" + }, + "generic": { + "us": 3705.9, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1602.9, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1602.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1602.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2142.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1573.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1543.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1573.9, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1745.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1947.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2110.1, + "level": "full" + }, + "insitu (copy)": { + "us": 2142.7, + "level": "full" + }, + "Document (string stream)": { + "us": 2507.6, + "level": "full" + }, + "Document": { + "us": 2690.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3816.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3816.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3816.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1061.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1061.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1061.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1793.6, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1793.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1793.6, + "level": "full" + }, + "owned (copy)": { + "us": 2514.9, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 855.1, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 855.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 855.1, + "level": "full" + }, + "editable": { + "us": 855.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 4606.2, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 4606.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 4606.2, + "level": "full" + }, + "parse": { + "us": 5425.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 1245.4, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 1245.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 1213.2, + "level": "full" + }, + "mut copy": { + "us": 1245.4, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 1247.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1139.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1139.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 6647.5, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 6647.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 6647.5, + "level": "full" + }, + "generic": { + "us": 6744.4, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 2320.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2320.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2320.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2668.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2360.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 2342.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2360.8, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2516.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2633.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2658.0, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 2668.7, + "level": "full" + }, + "Document (string stream)": { + "us": 2953.8, + "level": "full" + }, + "Document": { + "us": 3151.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 5854.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5854.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5854.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1970.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1970.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1970.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 3891.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 3891.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 3891.2, + "level": "full" + }, + "owned (copy)": { + "us": 4690.0, + "level": "full" + } + } + } + } + }, + "minify": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 517.7, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 517.7, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 497.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 497.6, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 497.6, + "level": "full" + }, + "parse + dump": { + "us": 517.7, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 521.2, + "level": "full" + }, + "parse_copy + dump": { + "us": 556.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 4444.8, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 4444.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 4444.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 678.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 678.4, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 727.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 727.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 619.8, + "level": "full" + }, + "insitu (copy) + write": { + "us": 678.4, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 678.6, + "level": "full" + }, + "read + write": { + "us": 688.3, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 727.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 783.1, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 105.4, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 788.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 788.0, + "level": "full" + }, + "variants": { + "minify": { + "us": 105.4, + "level": "partial" + }, + "DOM + to_string": { + "us": 783.1, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 788.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 710.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 710.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 4131.9, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 443.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 443.5, + "level": "partial" + }, + "generic (strict)": { + "us": 4131.9, + "level": "full" + }, + "generic": { + "us": 4305.0, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1924.5, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1924.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1806.3, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1806.3, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 1806.3, + "level": "full" + }, + "parse + serialize": { + "us": 1924.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer", + "us": 2808.0, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (raw numbers) (no encoding check)", + "us": 2022.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 3112.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2367.0, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2022.3, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 2029.7, + "level": "no UTF-8" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 2074.6, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2362.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2367.0, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 2808.0, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 2863.8, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 2887.1, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 3112.6, + "level": "full" + }, + "Document + Writer": { + "us": 3194.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4012.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4012.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4012.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1000.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1000.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1000.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1888.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1888.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1888.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 1030.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 1030.2, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 1034.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 1034.0, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 1030.2, + "level": "full" + }, + "read + dump (reused)": { + "us": 1034.0, + "level": "full" + }, + "parse + dump": { + "us": 1040.1, + "level": "full" + }, + "parse_copy + dump": { + "us": 1164.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 5713.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 5713.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 5713.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 1234.6, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 1234.6, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 1340.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 1340.3, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 1189.1, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 1234.6, + "level": "full" + }, + "read + write": { + "us": 1257.6, + "level": "full" + }, + "insitu (copy) + write": { + "us": 1278.1, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 1340.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 1395.0, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 269.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 1388.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 1388.0, + "level": "full" + }, + "variants": { + "minify": { + "us": 269.0, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 1388.0, + "level": "full" + }, + "DOM + to_string": { + "us": 1395.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1485.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1485.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 7465.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1059.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1059.1, + "level": "partial" + }, + "generic (strict)": { + "us": 7465.4, + "level": "full" + }, + "generic": { + "us": 7838.0, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2568.7, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2568.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2734.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2734.1, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 2568.7, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 2734.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer", + "us": 2975.2, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (no encoding check)", + "us": 2480.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 3396.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2979.8, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (no encoding check)": { + "us": 2480.1, + "level": "no UTF-8" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 2559.3, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2855.7, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 2975.2, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2979.8, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 3031.7, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 3045.5, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 3243.4, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 3396.9, + "level": "full" + }, + "Document + Writer": { + "us": 3521.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 6582.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6582.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6582.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2096.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2096.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2096.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 4196.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 4196.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 4196.0, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 2456.1, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 2456.1, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 5286.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 5286.7, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 2456.1, + "level": "full" + }, + "parse + dump": { + "us": 5042.6, + "level": "full" + }, + "read + dump (reused)": { + "us": 5286.7, + "level": "full" + }, + "parse_copy + dump": { + "us": 5371.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 16710.6, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 16710.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 16710.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 3472.2, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 3472.2, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 6374.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 6374.7, + "level": "full" + }, + "variants": { + "read (raw numbers) + write": { + "us": 3472.2, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 6282.8, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 6374.7, + "level": "full" + }, + "insitu (copy) + write": { + "us": 6376.0, + "level": "full" + }, + "read + write": { + "us": 6420.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 8303.2, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 337.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 8712.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 8712.4, + "level": "full" + }, + "variants": { + "minify": { + "us": 337.1, + "level": "partial" + }, + "DOM + to_string": { + "us": 8303.2, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 8712.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 8121.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 8121.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 26961.6, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 2221.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 2221.9, + "level": "partial" + }, + "generic": { + "us": 26550.0, + "level": "partial" + }, + "generic (strict)": { + "us": 26961.6, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 12622.5, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 12622.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 12883.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 12883.9, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 12622.5, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 12883.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (raw numbers)", + "us": 14986.3, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (raw numbers)", + "us": 14986.3, + "level": "full" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 21630.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 21630.1, + "level": "full" + }, + "variants": { + "SAX to Writer (raw numbers)": { + "us": 14986.3, + "level": "full" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 15205.7, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 21630.1, + "level": "full" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 21691.3, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 22060.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 22298.3, + "level": "no UTF-8" + }, + "Document + Writer": { + "us": 22589.2, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 22811.9, + "level": "full" + }, + "SAX to Writer (no encoding check)": { + "us": 23647.5, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 24346.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 17306.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 17306.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 17306.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 7795.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 7795.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 7795.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 15716.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 15716.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 15716.2, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 146125.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 146125.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 113317.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 113317.7, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 113317.7, + "level": "full" + }, + "parse + dump": { + "us": 146125.4, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 151284.6, + "level": "full" + }, + "parse_copy + dump": { + "us": 187850.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 543033.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 543033.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 543033.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 193235.3, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 193235.3, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 99883.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 99883.3, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 99883.3, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 154016.2, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 193235.3, + "level": "full" + }, + "read + write": { + "us": 193451.6, + "level": "full" + }, + "insitu (copy) + write": { + "us": 198565.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 275006.6, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 45087.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 216862.5, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 216862.5, + "level": "full" + }, + "variants": { + "minify": { + "us": 45087.0, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 216862.5, + "level": "full" + }, + "DOM + to_string": { + "us": 275006.6, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 166935.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 166935.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 528810.7, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 91152.7, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 91152.7, + "level": "partial" + }, + "generic": { + "us": 515973.2, + "level": "partial" + }, + "generic (strict)": { + "us": 528810.7, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 329090.3, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 329090.3, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 277756.5, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 277756.5, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 277756.5, + "level": "full" + }, + "parse + serialize": { + "us": 329090.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 358806.9, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 261526.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 398389.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 310770.1, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 261526.8, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 279575.6, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 280239.1, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 310770.1, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 326476.3, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 358806.9, + "level": "full" + }, + "SAX to Writer": { + "us": 370482.2, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 371569.7, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 398389.8, + "level": "full" + }, + "Document + Writer": { + "us": 425669.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 509701.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 509701.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 509701.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 215280.2, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 215280.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 215280.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 414376.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 414376.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 414376.9, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 2.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 2.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 2.3, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 2.3, + "level": "full" + }, + "parse + dump": { + "us": 2.4, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 2.4, + "level": "full" + }, + "parse_copy + dump": { + "us": 2.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 21.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 21.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 21.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 3.1, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 3.1, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 2.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 2.8, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 2.8, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 3.0, + "level": "full" + }, + "read + write": { + "us": 3.1, + "level": "full" + }, + "insitu (copy) + write": { + "us": 3.1, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 3.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 4.0, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 0.5, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 3.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 3.6, + "level": "full" + }, + "variants": { + "minify": { + "us": 0.5, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 3.6, + "level": "full" + }, + "DOM + to_string": { + "us": 4.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 3.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 3.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 17.2, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1.9, + "level": "partial" + }, + "generic": { + "us": 17.0, + "level": "partial" + }, + "generic (strict)": { + "us": 17.2, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 8.4, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 8.4, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 8.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 8.2, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 8.2, + "level": "full" + }, + "parse + serialize": { + "us": 8.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 12.7, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 7.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 15.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 11.1, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 7.2, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 9.6, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 9.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 11.1, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 11.6, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 12.7, + "level": "full" + }, + "SAX to Writer": { + "us": 13.5, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 13.5, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 15.0, + "level": "full" + }, + "Document + Writer": { + "us": 15.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 16.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 16.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 16.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 5.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 9.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 9.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 9.2, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 416.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 416.0, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 414.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 414.1, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 414.1, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 416.0, + "level": "full" + }, + "parse + dump": { + "us": 423.4, + "level": "full" + }, + "parse_copy + dump": { + "us": 453.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 3850.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 3850.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 3850.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 566.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 566.5, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 563.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 563.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 536.4, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 563.5, + "level": "full" + }, + "insitu (copy) + write": { + "us": 566.5, + "level": "full" + }, + "read + write": { + "us": 568.9, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 576.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 692.6, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 72.8, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 693.0, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 693.0, + "level": "full" + }, + "variants": { + "minify": { + "us": 72.8, + "level": "partial" + }, + "DOM + to_string": { + "us": 692.6, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 693.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 537.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 537.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3584.2, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 343.7, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 343.7, + "level": "partial" + }, + "generic (strict)": { + "us": 3584.2, + "level": "full" + }, + "generic": { + "us": 3610.6, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1613.1, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1613.1, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1621.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1621.1, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 1613.1, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 1621.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 2268.6, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1588.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2686.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2005.6, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1588.1, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1677.3, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1720.5, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2003.4, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2005.6, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 2268.6, + "level": "full" + }, + "SAX to Writer": { + "us": 2394.2, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 2418.4, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 2686.4, + "level": "full" + }, + "Document + Writer": { + "us": 2746.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3887.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3887.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3887.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 864.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 864.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 864.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1839.7, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1839.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1839.7, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 773.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 773.5, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 816.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 816.0, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 773.5, + "level": "full" + }, + "parse + dump": { + "us": 774.0, + "level": "full" + }, + "read + dump (reused)": { + "us": 816.0, + "level": "full" + }, + "parse_copy + dump": { + "us": 851.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 5778.1, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 5778.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 5778.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 891.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 891.6, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 890.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 890.9, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 823.6, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 890.9, + "level": "full" + }, + "insitu (copy) + write": { + "us": 891.6, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 898.1, + "level": "full" + }, + "read + write": { + "us": 908.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 1329.9, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 72.9, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 1265.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 1265.6, + "level": "full" + }, + "variants": { + "minify": { + "us": 72.9, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 1265.6, + "level": "full" + }, + "DOM + to_string": { + "us": 1329.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1236.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1236.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 7126.2, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 634.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 634.8, + "level": "partial" + }, + "generic (strict)": { + "us": 7126.2, + "level": "full" + }, + "generic": { + "us": 7268.4, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2476.7, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2476.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2411.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2411.1, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 2411.1, + "level": "full" + }, + "parse + serialize": { + "us": 2476.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 2696.0, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 2209.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 3286.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2816.6, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 2209.3, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 2368.2, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2656.7, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 2696.0, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2816.6, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 2885.7, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 2906.1, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 3223.5, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 3286.6, + "level": "full" + }, + "Document + Writer": { + "us": 3470.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 5737.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5737.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5737.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1729.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1729.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1729.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 3903.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 3903.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 3903.9, + "level": "full" + } + } + } + } + }, + "write": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 153.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 153.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 153.8, + "level": "n/a" + }, + "dump": { + "us": 159.7, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 450.9, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 450.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 450.9, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 217.8, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 217.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 217.8, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 388.9, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 388.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 388.9, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 627.2, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 627.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 627.2, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 223.8, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 223.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 223.8, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 399.1, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 399.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 399.1, + "level": "n/a" + }, + "generic (strict)": { + "us": 417.1, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 478.5, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 478.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 478.5, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 549.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 549.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 549.8, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 434.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 434.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 434.3, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 582.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 582.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 582.5, + "level": "n/a" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 278.6, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 278.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 278.6, + "level": "n/a" + }, + "dump": { + "us": 310.7, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 628.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 628.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 628.3, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 386.0, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 386.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 386.0, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 655.5, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 655.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 655.5, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 1008.0, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 1008.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 1008.0, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 474.9, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 474.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 474.9, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 748.2, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 748.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 748.2, + "level": "n/a" + }, + "generic (strict)": { + "us": 786.5, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 916.0, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 916.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 916.0, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 887.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 887.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 887.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 927.2, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 927.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 927.2, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 799.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 799.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 799.5, + "level": "n/a" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 989.1, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 989.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 989.1, + "level": "n/a" + }, + "dump": { + "us": 3714.5, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 4506.5, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 4506.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 4506.5, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 3476.1, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 3476.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 3476.1, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 4895.9, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 4895.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 4895.9, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 9596.0, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 9596.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 9596.0, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 4850.4, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 4850.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 4850.4, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 4220.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 4220.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 4220.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 4254.8, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 5614.9, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 5614.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 5614.9, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4005.1, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 4005.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4005.1, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 3987.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 3987.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3987.3, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 5146.6, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 5146.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 5146.6, + "level": "n/a" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 64301.4, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 64301.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 64301.4, + "level": "n/a" + }, + "dump": { + "us": 67038.5, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 116528.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 116528.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 116528.8, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 71247.3, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 71247.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 71247.3, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 157616.0, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 157616.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 157616.0, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 123763.6, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 123763.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 123763.6, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 65131.2, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 65131.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 65131.2, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 128019.6, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 128019.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 128019.6, + "level": "n/a" + }, + "generic (strict)": { + "us": 140059.9, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 141845.7, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 141845.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 141845.7, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 134162.6, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 134162.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 134162.6, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 109175.6, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 109175.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 109175.6, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 122623.4, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 122623.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 122623.4, + "level": "n/a" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 0.9, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 0.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 0.9, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 0.9, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 2.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 2.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 2.0, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 1.4, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 1.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 1.4, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 2.1, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 2.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 2.1, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 3.7, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 3.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 3.7, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 1.3, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 1.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 1.3, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 2.0, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 2.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 2.0, + "level": "n/a" + }, + "generic (strict)": { + "us": 2.3, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 2.5, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 2.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 2.5, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 3.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 2.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2.8, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 2.8, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 2.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 2.8, + "level": "n/a" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 148.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 148.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 148.8, + "level": "n/a" + }, + "dump": { + "us": 155.7, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 444.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 444.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 444.8, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 217.3, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 217.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 217.3, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 384.4, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 384.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 384.4, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 613.8, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 613.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 613.8, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 202.4, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 202.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 202.4, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 393.9, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 393.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 393.9, + "level": "n/a" + }, + "generic (strict)": { + "us": 413.9, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 474.8, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 474.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 474.8, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 550.4, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 550.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 550.4, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 434.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 434.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 434.7, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 580.2, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 580.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 580.2, + "level": "n/a" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 266.1, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 266.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 266.1, + "level": "n/a" + }, + "dump": { + "us": 272.1, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 635.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 635.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 635.3, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 363.4, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 363.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 363.4, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 670.2, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 670.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 670.2, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 967.6, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 967.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 967.6, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 478.8, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 478.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 478.8, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 753.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic (strict)", + "us": 753.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 753.3, + "level": "n/a" + }, + "generic": { + "us": 785.5, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 918.1, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 918.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 918.1, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 828.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 828.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 828.7, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 889.5, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 889.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 889.5, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 765.0, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 765.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 765.0, + "level": "n/a" + } + } + } + } + } +} diff --git a/docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc.json b/docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc.json new file mode 100644 index 000000000..cbcb94d83 --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc.json @@ -0,0 +1,14413 @@ +{ + "validate": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 258.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 258.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 313.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 313.6, + "level": "full" + }, + "variants": { + "accept": { + "us": 258.1, + "level": "full" + }, + "read (reused)": { + "us": 313.6, + "level": "full" + }, + "parse": { + "us": 324.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 682.7, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 682.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 682.7, + "level": "full" + }, + "parse": { + "us": 3479.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 395.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 395.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 396.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 396.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 352.5, + "level": "full" + }, + "read": { + "us": 395.9, + "level": "full" + }, + "read (reused allocator)": { + "us": 396.8, + "level": "full" + }, + "insitu (copy)": { + "us": 398.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 404.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 301.2, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 301.2, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 301.1, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 301.1, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 301.1, + "level": "full" + }, + "DOM": { + "us": 301.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 402.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 402.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 712.4, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 712.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 712.4, + "level": "full" + }, + "generic (double, strict)": { + "us": 2356.2, + "level": "full" + }, + "generic (double)": { + "us": 2363.7, + "level": "partial" + }, + "generic": { + "us": 2849.1, + "level": "partial" + }, + "generic (strict)": { + "us": 2915.2, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 690.5, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 690.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 697.5, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 697.5, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 690.5, + "level": "full" + }, + "SAX (reused)": { + "us": 697.5, + "level": "full" + }, + "SAX": { + "us": 734.3, + "level": "full" + }, + "parse": { + "us": 1282.5, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1339.2, + "level": "full" + }, + "parser (reused)": { + "us": 1363.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1230.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1051.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1516.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1401.1, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1011.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1051.7, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1120.8, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1132.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1166.4, + "level": "full" + }, + "insitu (copy)": { + "us": 1230.1, + "level": "full" + }, + "SAX (default precision) (no encoding check)": { + "us": 1247.9, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1252.0, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 1318.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 1324.7, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1324.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1393.2, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1401.1, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1516.9, + "level": "full" + }, + "SAX (default precision)": { + "us": 1943.2, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2008.5, + "level": "full" + }, + "SAX": { + "us": 2039.8, + "level": "full" + }, + "Document": { + "us": 2195.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 624.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 483.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 483.8, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 624.3, + "level": "full" + }, + "Value": { + "us": 3430.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 501.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 501.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 501.3, + "level": "full" + }, + "Value": { + "us": 558.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 567.2, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 567.2, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 591.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 591.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 567.2, + "level": "full" + }, + "tape (reused)": { + "us": 591.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1274.3, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 512.8, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 512.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 827.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 827.6, + "level": "full" + }, + "variants": { + "accept": { + "us": 512.8, + "level": "full" + }, + "parse": { + "us": 821.9, + "level": "full" + }, + "read (reused)": { + "us": 827.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 1418.7, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1418.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 1418.7, + "level": "full" + }, + "parse": { + "us": 5293.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 940.0, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 940.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1001.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1001.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 837.2, + "level": "full" + }, + "read (raw numbers)": { + "us": 940.0, + "level": "full" + }, + "insitu (copy)": { + "us": 947.5, + "level": "full" + }, + "read": { + "us": 956.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 1001.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 694.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 694.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 687.8, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 687.8, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 687.8, + "level": "full" + }, + "DOM": { + "us": 694.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 932.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 932.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1982.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1982.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1982.9, + "level": "full" + }, + "generic (double)": { + "us": 3997.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 4043.9, + "level": "full" + }, + "generic (strict)": { + "us": 5297.4, + "level": "full" + }, + "generic": { + "us": 5360.0, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 917.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 917.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 951.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 951.1, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 917.3, + "level": "full" + }, + "SAX (reused)": { + "us": 951.1, + "level": "full" + }, + "SAX": { + "us": 971.1, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1610.3, + "level": "full" + }, + "parse": { + "us": 1636.0, + "level": "full" + }, + "parser (reused)": { + "us": 1637.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 1552.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (default precision) (no encoding check)", + "us": 1433.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1993.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1911.7, + "level": "no UTF-8" + }, + "variants": { + "SAX (default precision) (no encoding check)": { + "us": 1433.7, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1471.0, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 1552.9, + "level": "full" + }, + "SAX (string stream)": { + "us": 1605.2, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1609.4, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1616.2, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1695.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1766.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1790.7, + "level": "full" + }, + "SAX (default precision)": { + "us": 1861.2, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1865.6, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1895.8, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1911.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1913.1, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1993.2, + "level": "full" + }, + "SAX": { + "us": 2082.3, + "level": "full" + }, + "Document": { + "us": 2302.9, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2335.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 1440.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1370.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1370.0, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 1440.0, + "level": "full" + }, + "Value": { + "us": 5622.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 969.7, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 969.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 969.7, + "level": "full" + }, + "Value": { + "us": 1192.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1429.6, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1429.6, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1442.3, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1442.3, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 1429.6, + "level": "full" + }, + "tape (reused)": { + "us": 1442.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 3462.6, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 934.3, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 934.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1367.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1367.1, + "level": "full" + }, + "variants": { + "accept": { + "us": 934.3, + "level": "full" + }, + "parse": { + "us": 1354.7, + "level": "full" + }, + "read (reused)": { + "us": 1367.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 4558.8, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 4558.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 4558.8, + "level": "full" + }, + "parse": { + "us": 11796.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 2199.0, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 2199.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 3531.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 3531.0, + "level": "full" + }, + "variants": { + "read (raw numbers)": { + "us": 2199.0, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 3238.7, + "level": "full" + }, + "insitu (copy)": { + "us": 3282.1, + "level": "full" + }, + "read": { + "us": 3439.1, + "level": "full" + }, + "read (reused allocator)": { + "us": 3531.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 3336.7, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 3336.7, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 3354.2, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 3354.2, + "level": "full" + }, + "variants": { + "DOM": { + "us": 3336.7, + "level": "full" + }, + "DOM (reused)": { + "us": 3354.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3349.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3349.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 2625.2, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 2625.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 2625.2, + "level": "full" + }, + "generic (double)": { + "us": 10379.7, + "level": "partial" + }, + "generic (double, strict)": { + "us": 10379.9, + "level": "full" + }, + "generic": { + "us": 17925.1, + "level": "partial" + }, + "generic (strict)": { + "us": 18350.8, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 1676.0, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 1676.0, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 5755.4, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 5755.4, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 1676.0, + "level": "full" + }, + "parse (numbers: none)": { + "us": 3045.3, + "level": "full" + }, + "SAX": { + "us": 5674.9, + "level": "full" + }, + "SAX (reused)": { + "us": 5755.4, + "level": "full" + }, + "parser (reused)": { + "us": 7024.6, + "level": "full" + }, + "parse": { + "us": 7050.3, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 3875.2, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision)", + "us": 3875.2, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 11932.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 11932.5, + "level": "full" + }, + "variants": { + "SAX (string stream, default precision)": { + "us": 3875.2, + "level": "full" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 3909.8, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 4364.7, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 4522.5, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 9361.8, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 9682.3, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 10216.5, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 10385.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 10498.8, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 10675.1, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 10929.3, + "level": "no UTF-8" + }, + "SAX (raw numbers)": { + "us": 11335.1, + "level": "full" + }, + "SAX": { + "us": 11351.6, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 11634.9, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 11932.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 12244.9, + "level": "no UTF-8" + }, + "Document": { + "us": 12311.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 12870.4, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2406.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 2313.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 2313.5, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2406.0, + "level": "full" + }, + "Value": { + "us": 12777.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 2249.1, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 2249.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 2249.1, + "level": "full" + }, + "Value": { + "us": 3650.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 4358.8, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 4358.8, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 4188.3, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 4188.3, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 4188.3, + "level": "full" + }, + "tape (copy)": { + "us": 4358.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 9740.4, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 34514.4, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 34514.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 42941.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 42941.5, + "level": "full" + }, + "variants": { + "accept": { + "us": 34514.4, + "level": "full" + }, + "read (reused)": { + "us": 42941.5, + "level": "full" + }, + "parse": { + "us": 80105.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 74331.3, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 74331.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 74331.3, + "level": "full" + }, + "parse": { + "us": 381484.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 130541.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 130541.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 65147.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 65147.4, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 65147.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 93043.0, + "level": "full" + }, + "insitu (copy)": { + "us": 130541.4, + "level": "full" + }, + "read": { + "us": 135114.5, + "level": "full" + }, + "read (raw numbers)": { + "us": 137990.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 120981.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 120981.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 48708.1, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 48708.1, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 48708.1, + "level": "full" + }, + "DOM": { + "us": 120981.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 98510.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 98510.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 76758.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 76758.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 76758.9, + "level": "full" + }, + "generic (double)": { + "us": 227348.8, + "level": "partial" + }, + "generic (double, strict)": { + "us": 231309.1, + "level": "full" + }, + "generic": { + "us": 301949.1, + "level": "partial" + }, + "generic (strict)": { + "us": 316773.4, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 62780.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 62780.9, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 62485.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 62485.1, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 62485.1, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 62780.9, + "level": "full" + }, + "SAX": { + "us": 65009.7, + "level": "full" + }, + "parser (reused)": { + "us": 127335.3, + "level": "full" + }, + "parse": { + "us": 181460.1, + "level": "full" + }, + "parse (numbers: none)": { + "us": 185393.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 124439.7, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 115815.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 188950.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 179981.0, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 102634.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 114703.8, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 115815.1, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 119164.9, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 124439.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 134338.3, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 146440.1, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 157490.4, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 161291.9, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 161993.3, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 164699.2, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 179981.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 184784.0, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 188950.8, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 240366.9, + "level": "full" + }, + "SAX": { + "us": 246653.0, + "level": "full" + }, + "SAX (default precision)": { + "us": 260697.4, + "level": "full" + }, + "Document": { + "us": 273829.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 64719.7, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 58247.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 58247.3, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 64719.7, + "level": "full" + }, + "Value": { + "us": 389667.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 54369.2, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 54369.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 54369.2, + "level": "full" + }, + "Value": { + "us": 113483.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 207551.3, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 207551.3, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 139519.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 139519.7, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 139519.7, + "level": "full" + }, + "tape (copy)": { + "us": 207551.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 277163.2, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 1.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "accept": { + "us": 1.2, + "level": "full" + }, + "read (reused)": { + "us": 1.4, + "level": "full" + }, + "parse": { + "us": 1.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 3.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 3.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 3.1, + "level": "full" + }, + "parse": { + "us": 18.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.6, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.5, + "level": "full" + }, + "read": { + "us": 1.6, + "level": "full" + }, + "insitu (copy)": { + "us": 1.6, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 1.7, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 1.4, + "level": "full" + }, + "DOM": { + "us": 1.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 2.5, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 2.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 2.5, + "level": "full" + }, + "generic (double)": { + "us": 8.1, + "level": "partial" + }, + "generic (double, strict)": { + "us": 8.5, + "level": "full" + }, + "generic": { + "us": 11.4, + "level": "partial" + }, + "generic (strict)": { + "us": 11.4, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 2.9, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 2.9, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 2.9, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 2.9, + "level": "full" + }, + "variants": { + "SAX": { + "us": 2.9, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 2.9, + "level": "full" + }, + "SAX (reused)": { + "us": 2.9, + "level": "full" + }, + "parser (reused)": { + "us": 5.8, + "level": "full" + }, + "parse": { + "us": 5.9, + "level": "full" + }, + "parse (numbers: none)": { + "us": 5.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 4.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 3.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 7.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 6.9, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 3.2, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 3.2, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 3.3, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 3.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 4.8, + "level": "full" + }, + "insitu (copy)": { + "us": 4.9, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 5.3, + "level": "full" + }, + "SAX (string stream)": { + "us": 5.4, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 6.3, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 6.3, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 6.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 6.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 7.4, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 7.5, + "level": "full" + }, + "SAX (default precision)": { + "us": 10.2, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 10.5, + "level": "full" + }, + "SAX": { + "us": 10.6, + "level": "full" + }, + "Document": { + "us": 11.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.9, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2.4, + "level": "full" + }, + "Value": { + "us": 12.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 1.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.8, + "level": "full" + }, + "Value": { + "us": 2.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 2.9, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 2.9, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 2.6, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 2.6, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 2.6, + "level": "full" + }, + "tape (copy)": { + "us": 2.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 5.7, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 212.4, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 212.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 259.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 259.4, + "level": "full" + }, + "variants": { + "accept": { + "us": 212.4, + "level": "full" + }, + "read (reused)": { + "us": 259.4, + "level": "full" + }, + "parse": { + "us": 265.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 546.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 546.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 546.2, + "level": "full" + }, + "parse": { + "us": 3115.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 321.6, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 321.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 320.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 320.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 286.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 320.4, + "level": "full" + }, + "read": { + "us": 321.6, + "level": "full" + }, + "insitu (copy)": { + "us": 321.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 326.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 281.4, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 281.4, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 280.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 280.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 280.4, + "level": "full" + }, + "DOM": { + "us": 281.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 297.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 297.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 509.1, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 509.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 509.1, + "level": "full" + }, + "generic (double)": { + "us": 2016.1, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2035.9, + "level": "full" + }, + "generic": { + "us": 2570.7, + "level": "partial" + }, + "generic (strict)": { + "us": 2581.7, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 545.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 545.9, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 554.5, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 554.5, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 545.9, + "level": "full" + }, + "SAX": { + "us": 554.2, + "level": "full" + }, + "SAX (reused)": { + "us": 554.5, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1165.7, + "level": "full" + }, + "parser (reused)": { + "us": 1173.9, + "level": "full" + }, + "parse": { + "us": 1178.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 855.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 767.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1436.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1310.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 736.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 767.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 825.3, + "level": "full" + }, + "insitu (copy)": { + "us": 855.8, + "level": "full" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 860.7, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 863.5, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 1010.5, + "level": "full" + }, + "SAX (string stream)": { + "us": 1015.4, + "level": "full" + }, + "SAX (default precision) (no encoding check)": { + "us": 1147.4, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1162.1, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1204.9, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1310.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1327.2, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1436.1, + "level": "full" + }, + "SAX (default precision)": { + "us": 1828.7, + "level": "full" + }, + "SAX": { + "us": 1837.2, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 1881.4, + "level": "full" + }, + "Document": { + "us": 2015.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 475.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 347.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 347.5, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 475.9, + "level": "full" + }, + "Value": { + "us": 3319.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 336.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 336.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 336.8, + "level": "full" + }, + "Value": { + "us": 416.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 516.9, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 516.9, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 541.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 541.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 516.9, + "level": "full" + }, + "tape (reused)": { + "us": 541.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1254.2, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 302.9, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 302.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 514.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 514.3, + "level": "full" + }, + "variants": { + "accept": { + "us": 302.9, + "level": "full" + }, + "read (reused)": { + "us": 514.3, + "level": "full" + }, + "parse": { + "us": 514.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 1087.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1087.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 1087.2, + "level": "full" + }, + "parse": { + "us": 4796.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 490.0, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 490.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 488.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 488.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 454.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 488.4, + "level": "full" + }, + "read": { + "us": 490.0, + "level": "full" + }, + "insitu (copy)": { + "us": 490.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 504.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 534.4, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 534.4, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 535.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 535.9, + "level": "full" + }, + "variants": { + "DOM": { + "us": 534.4, + "level": "full" + }, + "DOM (reused)": { + "us": 535.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 600.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 600.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 751.0, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 751.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 751.0, + "level": "full" + }, + "generic (double)": { + "us": 2950.5, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3010.4, + "level": "full" + }, + "generic": { + "us": 4339.4, + "level": "partial" + }, + "generic (strict)": { + "us": 4381.5, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 561.6, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 561.6, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 608.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 608.6, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 561.6, + "level": "full" + }, + "SAX": { + "us": 608.4, + "level": "full" + }, + "SAX (reused)": { + "us": 608.6, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1264.8, + "level": "full" + }, + "parser (reused)": { + "us": 1342.7, + "level": "full" + }, + "parse": { + "us": 1346.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 987.4, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 984.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1681.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1681.6, + "level": "full" + }, + "variants": { + "SAX (string stream, default precision) (no encoding check)": { + "us": 984.8, + "level": "no UTF-8" + }, + "SAX (string stream, default precision)": { + "us": 987.4, + "level": "full" + }, + "SAX (string stream)": { + "us": 1105.3, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 1106.7, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1141.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1144.1, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1176.4, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1180.5, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 1210.5, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1320.6, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1558.3, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 1561.2, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1657.2, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1681.6, + "level": "full" + }, + "SAX": { + "us": 1701.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1738.6, + "level": "no UTF-8" + }, + "SAX (raw numbers)": { + "us": 1990.6, + "level": "full" + }, + "Document": { + "us": 2109.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 647.4, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 641.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 641.0, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 647.4, + "level": "full" + }, + "Value": { + "us": 5357.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 610.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 610.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 610.9, + "level": "full" + }, + "Value": { + "us": 903.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1075.7, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1075.7, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1077.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1077.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 1075.7, + "level": "full" + }, + "tape (reused)": { + "us": 1077.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 3360.4, + "level": "full" + } + } + } + } + }, + "sum": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 397.9, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 397.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 387.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 387.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 387.6, + "level": "full" + }, + "parse": { + "us": 397.9, + "level": "full" + }, + "parse_copy": { + "us": 428.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 813.7, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 813.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 813.7, + "level": "full" + }, + "parse": { + "us": 3499.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 444.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 444.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 446.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 446.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 415.0, + "level": "full" + }, + "insitu (copy)": { + "us": 444.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 446.2, + "level": "full" + }, + "read": { + "us": 446.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 347.8, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 347.8, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 346.2, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 346.2, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 346.2, + "level": "full" + }, + "On-Demand": { + "us": 347.8, + "level": "full" + }, + "DOM (reused)": { + "us": 376.6, + "level": "full" + }, + "DOM": { + "us": 379.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 455.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 455.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2482.6, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 2447.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 2447.6, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2482.6, + "level": "full" + }, + "generic (strict)": { + "us": 2905.9, + "level": "full" + }, + "generic": { + "us": 2908.2, + "level": "partial" + }, + "lazy_json": { + "us": 3130.7, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 698.9, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 698.9, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 699.0, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 699.0, + "level": "full" + }, + "variants": { + "SAX": { + "us": 698.9, + "level": "full" + }, + "SAX (reused)": { + "us": 699.0, + "level": "full" + }, + "parser (reused)": { + "us": 1341.5, + "level": "full" + }, + "parse": { + "us": 1350.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1258.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1101.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1576.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1447.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1063.0, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1101.1, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1172.5, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1221.4, + "level": "full" + }, + "insitu (copy)": { + "us": 1258.1, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1280.9, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1382.1, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1447.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1453.6, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1576.2, + "level": "full" + }, + "SAX": { + "us": 1988.6, + "level": "full" + }, + "Document": { + "us": 2166.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1311.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1311.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1311.0, + "level": "full" + }, + "Value": { + "us": 3539.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 501.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 501.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 501.0, + "level": "full" + }, + "Value": { + "us": 813.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 681.3, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 681.3, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1417.9, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1417.9, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 681.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 1398.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 1417.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 972.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 972.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 958.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 958.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 958.6, + "level": "full" + }, + "parse": { + "us": 972.5, + "level": "full" + }, + "parse_copy": { + "us": 1118.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 1665.5, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 1665.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 1665.5, + "level": "full" + }, + "parse": { + "us": 5466.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1097.5, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1097.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1113.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1113.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 986.3, + "level": "full" + }, + "read": { + "us": 1097.5, + "level": "full" + }, + "insitu (copy)": { + "us": 1098.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 1113.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 804.7, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 804.7, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 803.2, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 803.2, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 803.2, + "level": "full" + }, + "On-Demand": { + "us": 804.7, + "level": "full" + }, + "DOM (reused)": { + "us": 900.1, + "level": "full" + }, + "DOM": { + "us": 906.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1114.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1114.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 4413.4, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 4413.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 4413.4, + "level": "full" + }, + "generic (double)": { + "us": 4452.0, + "level": "partial" + }, + "generic (strict)": { + "us": 5334.6, + "level": "full" + }, + "generic": { + "us": 5369.4, + "level": "partial" + }, + "lazy_json": { + "us": 14119.5, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 957.0, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 957.0, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 958.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 958.1, + "level": "full" + }, + "variants": { + "SAX": { + "us": 957.0, + "level": "full" + }, + "SAX (reused)": { + "us": 958.1, + "level": "full" + }, + "parser (reused)": { + "us": 1788.9, + "level": "full" + }, + "parse": { + "us": 1789.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 1717.2, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 1635.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2062.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 2062.7, + "level": "full" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 1635.2, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1688.3, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1717.2, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1798.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1837.9, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 1906.9, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1948.8, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2013.3, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 2062.7, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2068.0, + "level": "no UTF-8" + }, + "SAX": { + "us": 2112.1, + "level": "full" + }, + "Document": { + "us": 2426.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 2287.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2287.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2287.8, + "level": "full" + }, + "Value": { + "us": 5984.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 1122.9, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1122.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1122.9, + "level": "full" + }, + "Value": { + "us": 1829.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 1649.9, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 1649.9, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3680.4, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3680.4, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 1649.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 3653.1, + "level": "full" + }, + "borrowed (reused)": { + "us": 3680.4, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 3500.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 3500.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 3522.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 3522.2, + "level": "full" + }, + "variants": { + "parse": { + "us": 3500.6, + "level": "full" + }, + "read (reused)": { + "us": 3522.2, + "level": "full" + }, + "parse_copy": { + "us": 3695.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 5690.0, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 5690.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 5690.0, + "level": "full" + }, + "parse": { + "us": 12161.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 4034.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 4034.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 3945.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 3945.9, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 3817.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 3945.9, + "level": "full" + }, + "insitu (copy)": { + "us": 4034.8, + "level": "full" + }, + "read": { + "us": 4050.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 3451.5, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 3451.5, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 3366.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 3366.6, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 3366.6, + "level": "full" + }, + "On-Demand": { + "us": 3451.5, + "level": "full" + }, + "DOM (reused)": { + "us": 4036.1, + "level": "full" + }, + "DOM": { + "us": 4157.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3979.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3979.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 10531.8, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 10222.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 10222.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 10531.8, + "level": "full" + }, + "generic (strict)": { + "us": 17647.7, + "level": "full" + }, + "generic": { + "us": 18120.1, + "level": "partial" + }, + "lazy_json": { + "us": 20661.0, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 5835.4, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 5835.4, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 5781.2, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 5781.2, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 5781.2, + "level": "full" + }, + "SAX": { + "us": 5835.4, + "level": "full" + }, + "parse": { + "us": 7225.8, + "level": "full" + }, + "parser (reused)": { + "us": 7246.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 9435.0, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 9368.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 12220.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 12220.1, + "level": "full" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 9368.2, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 9435.0, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 10294.7, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 10347.7, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 10515.0, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 10555.8, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 11200.6, + "level": "no UTF-8" + }, + "SAX": { + "us": 11375.9, + "level": "full" + }, + "Document (reused allocator)": { + "us": 12220.1, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 12472.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 12552.4, + "level": "no UTF-8" + }, + "Document": { + "us": 12602.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 7126.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 7126.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 7126.8, + "level": "full" + }, + "Value": { + "us": 13663.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 4397.1, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4397.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4397.1, + "level": "full" + }, + "Value": { + "us": 7133.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 5083.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 5083.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 10643.9, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 10643.9, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 5083.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 10643.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 10771.4, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 89756.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 89756.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 50992.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 50992.3, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 50992.3, + "level": "full" + }, + "parse": { + "us": 89756.2, + "level": "full" + }, + "parse_copy": { + "us": 132156.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 97414.0, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 97414.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 97414.0, + "level": "full" + }, + "parse": { + "us": 405297.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 138743.5, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 138743.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 69157.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 69157.4, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 69157.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 97585.6, + "level": "full" + }, + "read": { + "us": 138743.5, + "level": "full" + }, + "insitu (copy)": { + "us": 142125.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 92768.8, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 92768.8, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 49571.5, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 49571.5, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 49571.5, + "level": "full" + }, + "DOM (reused)": { + "us": 58328.5, + "level": "full" + }, + "On-Demand": { + "us": 92768.8, + "level": "full" + }, + "DOM": { + "us": 131126.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 105080.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 105080.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 231505.3, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 225437.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 225437.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 231505.3, + "level": "full" + }, + "generic (double)": { + "us": 233548.0, + "level": "partial" + }, + "generic (strict)": { + "us": 314867.5, + "level": "full" + }, + "generic": { + "us": 316327.7, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 59655.5, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 59655.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 59184.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 59184.3, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 59184.3, + "level": "full" + }, + "SAX": { + "us": 59655.5, + "level": "full" + }, + "parser (reused)": { + "us": 132393.0, + "level": "full" + }, + "parse": { + "us": 192260.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 128415.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 112449.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 198339.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 183038.2, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 105844.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 112158.3, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 112449.5, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 128415.3, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 152055.8, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 154426.5, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 158907.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 183038.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 185367.0, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 198339.7, + "level": "full" + }, + "SAX": { + "us": 244103.0, + "level": "full" + }, + "Document": { + "us": 264334.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 129497.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 129497.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 129497.0, + "level": "full" + }, + "Value": { + "us": 403258.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 59583.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 59583.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 59583.3, + "level": "full" + }, + "Value": { + "us": 139337.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 210185.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 210185.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 220283.6, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 220283.6, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 210185.2, + "level": "full" + }, + "borrowed (reused)": { + "us": 220283.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 282561.7, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.9, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.9, + "level": "full" + }, + "parse": { + "us": 2.0, + "level": "full" + }, + "parse_copy": { + "us": 2.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 4.0, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 4.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 4.0, + "level": "full" + }, + "parse": { + "us": 18.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.8, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 1.8, + "level": "full" + }, + "read": { + "us": 1.9, + "level": "full" + }, + "insitu (copy)": { + "us": 1.9, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 1.9, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 1.9, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 1.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 1.6, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 1.6, + "level": "full" + }, + "On-Demand": { + "us": 1.9, + "level": "full" + }, + "DOM (reused)": { + "us": 2.0, + "level": "full" + }, + "DOM": { + "us": 2.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 2.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 2.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 8.5, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 6.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 6.4, + "level": "partial" + }, + "generic (double)": { + "us": 8.3, + "level": "partial" + }, + "generic (double, strict)": { + "us": 8.5, + "level": "full" + }, + "generic": { + "us": 11.5, + "level": "partial" + }, + "generic (strict)": { + "us": 11.6, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 3.0, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 3.0, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 3.0, + "level": "full" + }, + "variants": { + "SAX": { + "us": 3.0, + "level": "full" + }, + "SAX (reused)": { + "us": 3.0, + "level": "full" + }, + "parser (reused)": { + "us": 6.1, + "level": "full" + }, + "parse": { + "us": 6.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 5.4, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 3.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 7.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.4, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 3.5, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 3.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 3.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 5.1, + "level": "full" + }, + "insitu (copy)": { + "us": 5.4, + "level": "full" + }, + "SAX (string stream)": { + "us": 5.8, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 6.8, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.4, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 7.8, + "level": "full" + }, + "Document (no encoding check)": { + "us": 7.9, + "level": "no UTF-8" + }, + "SAX": { + "us": 10.7, + "level": "full" + }, + "Document": { + "us": 11.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 4.6, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4.6, + "level": "full" + }, + "Value": { + "us": 13.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2.5, + "level": "full" + }, + "Value": { + "us": 3.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 3.5, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 5.8, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 5.8, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 3.5, + "level": "full" + }, + "borrowed (reused)": { + "us": 5.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 6.1, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 337.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 337.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 331.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 331.0, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 331.0, + "level": "full" + }, + "parse": { + "us": 337.3, + "level": "full" + }, + "parse_copy": { + "us": 365.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 686.3, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 686.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 686.3, + "level": "full" + }, + "parse": { + "us": 3289.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 375.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 375.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 373.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 373.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 343.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 373.5, + "level": "full" + }, + "insitu (copy)": { + "us": 375.0, + "level": "full" + }, + "read": { + "us": 376.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 329.8, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 329.8, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 325.8, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 325.8, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 325.8, + "level": "full" + }, + "On-Demand": { + "us": 329.8, + "level": "full" + }, + "DOM (reused)": { + "us": 359.4, + "level": "full" + }, + "DOM": { + "us": 362.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 353.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 353.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2103.7, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 1815.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 1815.3, + "level": "partial" + }, + "generic (double)": { + "us": 2083.1, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2103.7, + "level": "full" + }, + "generic": { + "us": 2629.8, + "level": "partial" + }, + "generic (strict)": { + "us": 2652.7, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 568.0, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 568.0, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 567.7, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 567.7, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 567.7, + "level": "full" + }, + "SAX": { + "us": 568.0, + "level": "full" + }, + "parser (reused)": { + "us": 1234.9, + "level": "full" + }, + "parse": { + "us": 1242.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 901.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 820.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1497.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1365.0, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 791.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 820.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 871.8, + "level": "full" + }, + "insitu (copy)": { + "us": 901.4, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 901.4, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1063.2, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1197.5, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1365.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1385.7, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1497.0, + "level": "full" + }, + "SAX": { + "us": 1910.6, + "level": "full" + }, + "Document": { + "us": 2070.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1119.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1119.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1119.0, + "level": "full" + }, + "Value": { + "us": 3713.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 443.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 443.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 443.3, + "level": "full" + }, + "Value": { + "us": 684.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 635.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 635.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1433.7, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1433.7, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 635.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 1433.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1434.6, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 729.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 729.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 714.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 714.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 714.6, + "level": "full" + }, + "parse": { + "us": 729.8, + "level": "full" + }, + "parse_copy": { + "us": 745.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 1431.5, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 1431.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 1431.5, + "level": "full" + }, + "parse": { + "us": 5393.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 636.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 636.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 635.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 635.1, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 635.1, + "level": "full" + }, + "insitu (copy)": { + "us": 636.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 638.1, + "level": "full" + }, + "read": { + "us": 645.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 652.3, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 652.3, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 658.9, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 658.9, + "level": "full" + }, + "variants": { + "On-Demand": { + "us": 652.3, + "level": "full" + }, + "On-Demand (reused)": { + "us": 658.9, + "level": "full" + }, + "DOM (reused)": { + "us": 753.4, + "level": "full" + }, + "DOM": { + "us": 760.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 787.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 787.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 3253.1, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 3243.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 3243.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3253.1, + "level": "full" + }, + "lazy_json": { + "us": 3800.9, + "level": "partial" + }, + "generic": { + "us": 4795.4, + "level": "partial" + }, + "generic (strict)": { + "us": 4815.8, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 633.8, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 633.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 640.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 640.6, + "level": "full" + }, + "variants": { + "SAX": { + "us": 633.8, + "level": "full" + }, + "SAX (reused)": { + "us": 640.6, + "level": "full" + }, + "parse": { + "us": 1566.3, + "level": "full" + }, + "parser (reused)": { + "us": 1604.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 1203.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream)", + "us": 1203.3, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1834.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1834.6, + "level": "full" + }, + "variants": { + "SAX (string stream)": { + "us": 1203.3, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 1212.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1295.9, + "level": "full" + }, + "insitu (copy)": { + "us": 1334.5, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 1361.4, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1416.6, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1523.3, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1834.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1901.5, + "level": "no UTF-8" + }, + "SAX": { + "us": 1964.3, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1967.6, + "level": "no UTF-8" + }, + "Document": { + "us": 2258.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1259.6, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1259.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1259.6, + "level": "full" + }, + "Value": { + "us": 5376.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 840.4, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 840.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 840.4, + "level": "full" + }, + "Value": { + "us": 1438.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 1231.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 1231.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3329.6, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3329.6, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 1231.2, + "level": "full" + }, + "borrowed (reused)": { + "us": 3329.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 3447.9, + "level": "full" + } + } + } + } + }, + "select": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "structs (from_json)", + "us": 332.8, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 332.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 327.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 327.7, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 327.7, + "level": "full" + }, + "structs (from_json)": { + "us": 332.8, + "level": "full" + }, + "parse": { + "us": 334.4, + "level": "full" + }, + "parse_copy": { + "us": 371.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 3360.1, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 3360.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 3360.1, + "level": "full" + }, + "parse": { + "us": 3362.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 401.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 401.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 404.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 404.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 365.6, + "level": "full" + }, + "read": { + "us": 401.9, + "level": "full" + }, + "insitu (copy)": { + "us": 402.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 404.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 405.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 313.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 180.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 311.3, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 175.2, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 175.2, + "level": "partial" + }, + "On-Demand": { + "us": 180.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 181.1, + "level": "partial" + }, + "On-Demand structs": { + "us": 181.5, + "level": "partial" + }, + "DOM (reused)": { + "us": 311.3, + "level": "full" + }, + "DOM": { + "us": 313.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 406.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 406.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 605.8, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 343.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 343.5, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 605.8, + "level": "full" + }, + "lazy_json": { + "us": 989.4, + "level": "partial" + }, + "generic (double)": { + "us": 2377.5, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2411.1, + "level": "full" + }, + "generic (strict)": { + "us": 2946.7, + "level": "full" + }, + "generic": { + "us": 2987.6, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 887.3, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 887.3, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1370.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1370.9, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 887.3, + "level": "full" + }, + "parse": { + "us": 1316.5, + "level": "full" + }, + "parser (reused)": { + "us": 1370.9, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1218.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1061.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1533.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1401.9, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1021.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1061.0, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1180.1, + "level": "full" + }, + "insitu (copy)": { + "us": 1218.7, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 1275.6, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1401.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1412.6, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1442.6, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 1507.5, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1533.1, + "level": "full" + }, + "Document": { + "us": 2117.6, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2159.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 700.6, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 700.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 700.6, + "level": "full" + }, + "structs": { + "us": 739.3, + "level": "no UTF-8" + }, + "Value": { + "us": 3473.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 504.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 504.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 504.2, + "level": "full" + }, + "Value": { + "us": 585.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 678.8, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 678.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 678.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 1284.4, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 827.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 827.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 820.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 820.2, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 820.2, + "level": "full" + }, + "parse": { + "us": 827.7, + "level": "full" + }, + "structs (from_json)": { + "us": 844.2, + "level": "full" + }, + "parse_copy": { + "us": 927.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 5267.6, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 5267.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 5267.6, + "level": "full" + }, + "parse": { + "us": 5285.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 952.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 952.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 998.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 998.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 839.8, + "level": "full" + }, + "insitu (copy)": { + "us": 952.7, + "level": "full" + }, + "read": { + "us": 953.9, + "level": "full" + }, + "read (raw numbers)": { + "us": 962.3, + "level": "full" + }, + "read (reused allocator)": { + "us": 998.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 698.8, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 496.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 709.7, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 498.7, + "level": "partial" + }, + "variants": { + "On-Demand (key selectors)": { + "us": 496.2, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 498.7, + "level": "partial" + }, + "On-Demand": { + "us": 499.0, + "level": "partial" + }, + "On-Demand structs": { + "us": 533.3, + "level": "partial" + }, + "DOM": { + "us": 698.8, + "level": "full" + }, + "DOM (reused)": { + "us": 709.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 948.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 948.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 2476.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 401.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 401.5, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 2476.5, + "level": "full" + }, + "generic (double)": { + "us": 3940.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3966.0, + "level": "full" + }, + "generic (strict)": { + "us": 5244.2, + "level": "full" + }, + "generic": { + "us": 5256.4, + "level": "partial" + }, + "lazy_json": { + "us": 8408.8, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1269.5, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1269.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1642.8, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1642.8, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1269.5, + "level": "full" + }, + "parser (reused)": { + "us": 1642.8, + "level": "full" + }, + "parse": { + "us": 1643.6, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1809.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1763.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1894.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1894.9, + "level": "full" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1648.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1693.1, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 1763.6, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1809.6, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 1816.7, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 1847.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1865.3, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1894.9, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1920.5, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 2119.7, + "level": "no UTF-8" + }, + "Document": { + "us": 2275.6, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2517.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 1532.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1526.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1526.5, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 1532.5, + "level": "full" + }, + "Value": { + "us": 5821.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 1033.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1033.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1033.2, + "level": "full" + }, + "Value": { + "us": 1226.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 1731.1, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 1731.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 1731.1, + "level": "full" + }, + "borrowed (copy)": { + "us": 3476.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1368.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1368.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1373.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1373.7, + "level": "full" + }, + "variants": { + "parse": { + "us": 1368.2, + "level": "full" + }, + "read (reused)": { + "us": 1373.7, + "level": "full" + }, + "structs (from_json)": { + "us": 1388.1, + "level": "full" + }, + "parse_copy": { + "us": 1560.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 12005.7, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 12005.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 12005.7, + "level": "full" + }, + "parse": { + "us": 12483.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 2204.3, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 2204.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 3500.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 3500.0, + "level": "full" + }, + "variants": { + "read (raw numbers)": { + "us": 2204.3, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 3358.7, + "level": "full" + }, + "read": { + "us": 3434.1, + "level": "full" + }, + "read (reused allocator)": { + "us": 3500.0, + "level": "full" + }, + "insitu (copy)": { + "us": 3523.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 3324.7, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 689.5, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 3490.5, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 698.4, + "level": "partial" + }, + "variants": { + "On-Demand (key selectors)": { + "us": 689.5, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 698.4, + "level": "partial" + }, + "On-Demand": { + "us": 720.0, + "level": "partial" + }, + "On-Demand structs": { + "us": 901.8, + "level": "partial" + }, + "DOM": { + "us": 3324.7, + "level": "full" + }, + "DOM (reused)": { + "us": 3490.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3463.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3463.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 2557.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 416.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 416.9, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 2557.2, + "level": "full" + }, + "lazy_json": { + "us": 3640.4, + "level": "partial" + }, + "generic (double)": { + "us": 10383.5, + "level": "partial" + }, + "generic (double, strict)": { + "us": 10884.7, + "level": "full" + }, + "generic (strict)": { + "us": 18620.2, + "level": "full" + }, + "generic": { + "us": 18916.1, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 7291.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 7291.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 7307.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 7307.2, + "level": "full" + }, + "variants": { + "parse": { + "us": 7291.6, + "level": "full" + }, + "parser (reused)": { + "us": 7307.2, + "level": "full" + }, + "parse_into structs": { + "us": 7567.9, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 10389.8, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream)", + "us": 10389.8, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 12439.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 12439.1, + "level": "full" + }, + "variants": { + "Document (string stream)": { + "us": 10389.8, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 10515.7, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 10725.2, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 10787.5, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 10836.1, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 11011.0, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 12439.1, + "level": "full" + }, + "Document": { + "us": 12575.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 12906.6, + "level": "no UTF-8" + }, + "Document (raw numbers)": { + "us": 12915.3, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 13024.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 13199.0, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 2529.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2402.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2402.0, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 2529.2, + "level": "full" + }, + "Value": { + "us": 13616.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 2328.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2328.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2328.5, + "level": "full" + }, + "Value": { + "us": 3907.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 5143.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 5143.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 5143.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 10672.8, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 89876.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 89876.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 53056.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 53056.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 53056.6, + "level": "full" + }, + "parse": { + "us": 89876.3, + "level": "full" + }, + "structs (from_json)": { + "us": 102875.2, + "level": "full" + }, + "parse_copy": { + "us": 131355.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 410220.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 410220.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 410220.7, + "level": "full" + }, + "structs (from_json)": { + "us": 428036.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 135777.7, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 135777.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 70652.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 70652.0, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 70652.0, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 96172.3, + "level": "full" + }, + "read (raw numbers)": { + "us": 135777.7, + "level": "full" + }, + "insitu (copy)": { + "us": 138922.1, + "level": "full" + }, + "read": { + "us": 139868.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 122555.9, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 48272.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 56403.4, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 28436.0, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 28436.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 48272.2, + "level": "partial" + }, + "On-Demand": { + "us": 48772.9, + "level": "partial" + }, + "DOM (reused)": { + "us": 56403.4, + "level": "full" + }, + "On-Demand structs": { + "us": 69146.1, + "level": "partial" + }, + "DOM": { + "us": 122555.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 110884.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 110884.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 89957.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 67466.7, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 67466.7, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 89957.0, + "level": "full" + }, + "lazy_json": { + "us": 121164.6, + "level": "partial" + }, + "generic (double, strict)": { + "us": 239604.5, + "level": "full" + }, + "generic (double)": { + "us": 250218.1, + "level": "partial" + }, + "generic (strict)": { + "us": 319624.4, + "level": "full" + }, + "generic": { + "us": 323477.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 95866.3, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 95866.3, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 135537.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 135537.9, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 95866.3, + "level": "full" + }, + "parser (reused)": { + "us": 135537.9, + "level": "full" + }, + "parse": { + "us": 190726.3, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 147469.9, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 137983.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 188613.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 182388.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 108290.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 116393.7, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 137983.7, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 147469.9, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 148650.3, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 158429.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 182388.4, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 183032.3, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 185663.7, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 188613.4, + "level": "full" + }, + "Document (raw numbers)": { + "us": 261083.0, + "level": "full" + }, + "Document": { + "us": 266364.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 107315.7, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 107315.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 107315.7, + "level": "full" + }, + "structs": { + "us": 134637.9, + "level": "no UTF-8" + }, + "Value": { + "us": 410661.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 90485.8, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 90485.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 90485.8, + "level": "full" + }, + "Value": { + "us": 130216.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 239164.4, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 239164.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 239164.4, + "level": "full" + }, + "borrowed (copy)": { + "us": 293642.8, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.5, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.5, + "level": "full" + }, + "parse": { + "us": 1.7, + "level": "full" + }, + "structs (from_json)": { + "us": 1.7, + "level": "full" + }, + "parse_copy": { + "us": 1.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 17.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 17.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 17.7, + "level": "full" + }, + "structs (from_json)": { + "us": 17.7, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.7, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.7, + "level": "full" + }, + "variants": { + "read": { + "us": 1.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.7, + "level": "full" + }, + "insitu (copy)": { + "us": 1.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.9, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 1.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 1.0, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 1.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 1.1, + "level": "partial" + }, + "On-Demand": { + "us": 1.2, + "level": "partial" + }, + "On-Demand structs": { + "us": 1.3, + "level": "partial" + }, + "DOM (reused)": { + "us": 1.6, + "level": "full" + }, + "DOM": { + "us": 1.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 2.1, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1.5, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 2.1, + "level": "full" + }, + "lazy_json": { + "us": 2.4, + "level": "partial" + }, + "generic (double)": { + "us": 9.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 9.3, + "level": "full" + }, + "generic": { + "us": 12.3, + "level": "partial" + }, + "generic (strict)": { + "us": 12.5, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 3.7, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 3.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 5.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 5.9, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 3.7, + "level": "full" + }, + "parser (reused)": { + "us": 5.9, + "level": "full" + }, + "parse": { + "us": 6.1, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 5.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 3.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 7.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.1, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 3.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 3.5, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 4.5, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 4.9, + "level": "full" + }, + "insitu (copy)": { + "us": 5.0, + "level": "full" + }, + "Document (string stream)": { + "us": 6.4, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.1, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 7.5, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 7.7, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 7.7, + "level": "no UTF-8" + }, + "Document": { + "us": 11.4, + "level": "full" + }, + "Document (raw numbers)": { + "us": 11.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 3.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 3.0, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 3.0, + "level": "full" + }, + "Value": { + "us": 13.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2.0, + "level": "full" + }, + "Value": { + "us": 2.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 3.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 3.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 5.9, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 276.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 276.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 272.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 272.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 272.6, + "level": "full" + }, + "parse": { + "us": 276.8, + "level": "full" + }, + "structs (from_json)": { + "us": 281.9, + "level": "full" + }, + "parse_copy": { + "us": 307.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 3212.0, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 3212.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 3212.0, + "level": "full" + }, + "parse": { + "us": 3244.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 333.8, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 333.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 332.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 332.2, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 301.0, + "level": "full" + }, + "read (reused allocator)": { + "us": 332.2, + "level": "full" + }, + "read": { + "us": 333.8, + "level": "full" + }, + "insitu (copy)": { + "us": 334.2, + "level": "full" + }, + "read (raw numbers)": { + "us": 337.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 295.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 158.9, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 293.1, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 156.2, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 156.2, + "level": "partial" + }, + "On-Demand": { + "us": 158.9, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 160.0, + "level": "partial" + }, + "On-Demand structs": { + "us": 162.5, + "level": "partial" + }, + "DOM (reused)": { + "us": 293.1, + "level": "full" + }, + "DOM": { + "us": 295.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 305.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 305.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 467.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 296.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 296.5, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 467.5, + "level": "full" + }, + "lazy_json": { + "us": 482.2, + "level": "partial" + }, + "generic (double)": { + "us": 2149.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2178.3, + "level": "full" + }, + "generic": { + "us": 2727.9, + "level": "partial" + }, + "generic (strict)": { + "us": 2793.3, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 754.3, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 754.3, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1201.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1201.6, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 754.3, + "level": "full" + }, + "parser (reused)": { + "us": 1201.6, + "level": "full" + }, + "parse": { + "us": 1209.3, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 862.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 779.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1456.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1319.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 746.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 779.0, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 833.0, + "level": "full" + }, + "insitu (copy)": { + "us": 862.7, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 1020.1, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 1131.7, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1319.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1343.1, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1366.1, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1456.8, + "level": "full" + }, + "Document": { + "us": 2024.1, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2055.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 540.9, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 540.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 540.9, + "level": "full" + }, + "structs": { + "us": 579.6, + "level": "no UTF-8" + }, + "Value": { + "us": 3279.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 371.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 371.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 371.4, + "level": "full" + }, + "Value": { + "us": 445.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 649.2, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 649.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 649.2, + "level": "full" + }, + "borrowed (copy)": { + "us": 1242.3, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 551.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 551.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 555.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 555.5, + "level": "full" + }, + "variants": { + "parse": { + "us": 551.4, + "level": "full" + }, + "read (reused)": { + "us": 555.5, + "level": "full" + }, + "parse_copy": { + "us": 569.8, + "level": "full" + }, + "structs (from_json)": { + "us": 606.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 5275.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 5275.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 5275.0, + "level": "full" + }, + "structs (from_json)": { + "us": 5363.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 509.4, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 509.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 535.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 535.2, + "level": "full" + }, + "variants": { + "read": { + "us": 509.4, + "level": "full" + }, + "insitu (copy)": { + "us": 512.1, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 512.3, + "level": "full" + }, + "read (reused allocator)": { + "us": 535.2, + "level": "full" + }, + "read (raw numbers)": { + "us": 561.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 572.7, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 334.7, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 599.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 356.3, + "level": "partial" + }, + "variants": { + "On-Demand": { + "us": 334.7, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 348.3, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 356.3, + "level": "partial" + }, + "On-Demand structs": { + "us": 389.9, + "level": "partial" + }, + "DOM": { + "us": 572.7, + "level": "full" + }, + "DOM (reused)": { + "us": 599.6, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 662.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 662.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 815.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 205.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 205.2, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 815.2, + "level": "full" + }, + "lazy_json": { + "us": 1707.1, + "level": "partial" + }, + "generic (double)": { + "us": 3279.8, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3410.3, + "level": "full" + }, + "generic (strict)": { + "us": 4850.0, + "level": "full" + }, + "generic": { + "us": 4994.5, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1074.9, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1074.9, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1435.4, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1435.4, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1074.9, + "level": "full" + }, + "parser (reused)": { + "us": 1435.4, + "level": "full" + }, + "parse": { + "us": 1511.7, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1282.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 1282.2, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1895.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1890.2, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1269.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1275.6, + "level": "full" + }, + "insitu (copy)": { + "us": 1282.2, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 1352.2, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 1430.4, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 1539.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1839.3, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1890.2, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1895.7, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 2175.1, + "level": "no UTF-8" + }, + "Document": { + "us": 2325.9, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2613.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 694.6, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 694.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 694.6, + "level": "full" + }, + "structs": { + "us": 726.2, + "level": "no UTF-8" + }, + "Value": { + "us": 4784.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 653.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 653.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 653.4, + "level": "full" + }, + "Value": { + "us": 836.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 1327.6, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 1327.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 1327.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 3067.6, + "level": "full" + } + } + } + } + }, + "edit": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 529.7, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 529.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 529.7, + "level": "full" + }, + "editable": { + "us": 536.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2832.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2832.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2832.5, + "level": "full" + }, + "parse": { + "us": 3834.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 791.4, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 791.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 746.4, + "level": "full" + }, + "mut copy": { + "us": 791.4, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 797.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 619.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 619.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3388.6, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 3289.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 3289.6, + "level": "partial" + }, + "generic (strict)": { + "us": 3388.6, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1767.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1767.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1767.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1918.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1747.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1737.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1747.0, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1854.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1865.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1918.5, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2020.1, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 2036.6, + "level": "full" + }, + "Document": { + "us": 2725.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4041.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4041.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4041.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1196.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1196.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1196.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1862.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1862.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1862.2, + "level": "full" + }, + "owned (copy)": { + "us": 2560.0, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 1148.7, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 1148.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 1148.7, + "level": "full" + }, + "editable": { + "us": 1162.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 4970.1, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 4970.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 4970.1, + "level": "full" + }, + "parse": { + "us": 5811.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 1631.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 1631.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 1526.1, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 1631.8, + "level": "full" + }, + "mut copy": { + "us": 1633.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1438.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1438.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 6002.3, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 5970.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 5970.1, + "level": "partial" + }, + "generic (strict)": { + "us": 6002.3, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 2493.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2493.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2493.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2740.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2691.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 2594.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2616.4, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 2691.0, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 2740.5, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 2743.8, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 2771.2, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2787.9, + "level": "no UTF-8" + }, + "Document": { + "us": 3204.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 6586.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6586.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6586.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2388.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2388.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2388.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 4193.6, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 4193.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 4193.6, + "level": "full" + }, + "owned (copy)": { + "us": 4989.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 2188.1, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 2188.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 2188.1, + "level": "full" + }, + "editable": { + "us": 5567.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 15805.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 15805.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 15805.5, + "level": "full" + }, + "parse": { + "us": 15845.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 7654.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 7654.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 7478.9, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 7654.7, + "level": "full" + }, + "mut copy": { + "us": 7676.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 8495.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 8495.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 21598.4, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 21329.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 21329.2, + "level": "partial" + }, + "generic (strict)": { + "us": 21598.4, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 12767.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 12767.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 12767.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 18812.1, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream)", + "us": 18812.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document (string stream)": { + "us": 18812.1, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 19170.2, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 19443.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 19447.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 19448.5, + "level": "full" + }, + "insitu (copy)": { + "us": 19695.5, + "level": "full" + }, + "Document": { + "us": 21357.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 21810.2, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 16630.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 16630.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 16630.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 7743.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 7743.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 7743.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "owned (copy)", + "us": 14895.5, + "level": "full" + }, + "best_any": { + "variant": "owned (copy)", + "us": 14895.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "owned (copy)": { + "us": 14895.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 14942.9, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 192322.7, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 192322.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 192322.7, + "level": "full" + }, + "editable (source numbers)": { + "us": 193342.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 647704.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 647704.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 647704.5, + "level": "full" + }, + "parse": { + "us": 844653.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 313354.7, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 313354.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 275024.6, + "level": "full" + }, + "mut copy": { + "us": 313354.7, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 313654.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 186077.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 186077.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 607766.9, + "level": "full" + }, + "best_any": { + "variant": "generic (strict)", + "us": 607766.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 607766.9, + "level": "full" + }, + "generic": { + "us": 622208.2, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 331309.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 331309.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 331309.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Document (string stream)", + "us": 268046.5, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 258426.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 234669.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 245724.3, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 258426.5, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 268046.5, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 277333.9, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 287472.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 308207.2, + "level": "no UTF-8" + }, + "Document": { + "us": 383510.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 632766.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 632766.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 632766.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 390951.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 390951.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 390951.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 391369.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 391369.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 391369.2, + "level": "full" + }, + "owned (copy)": { + "us": 574174.1, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 3.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 3.0, + "level": "full" + }, + "editable (source numbers)": { + "us": 3.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 13.1, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 13.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 13.1, + "level": "full" + }, + "parse": { + "us": 19.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 3.6, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 3.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "mut copy": { + "us": 3.6, + "level": "full" + }, + "insitu (copy untimed) + mut copy": { + "us": 3.6, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 3.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 14.8, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 14.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 14.4, + "level": "partial" + }, + "generic (strict)": { + "us": 14.8, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 8.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 8.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 8.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 8.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 7.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy) (no encoding check)": { + "us": 7.2, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 7.2, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 8.3, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 8.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 8.7, + "level": "full" + }, + "Document (string stream)": { + "us": 10.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 11.3, + "level": "no UTF-8" + }, + "Document": { + "us": 15.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 17.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 17.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 17.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 6.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 9.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 9.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 9.0, + "level": "full" + }, + "owned (copy)": { + "us": 13.1, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 474.8, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 474.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 474.8, + "level": "full" + }, + "editable (source numbers)": { + "us": 476.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2673.6, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2673.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2673.6, + "level": "full" + }, + "parse": { + "us": 3656.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 704.3, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 704.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 677.0, + "level": "full" + }, + "mut copy": { + "us": 704.3, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 704.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 511.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 511.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3153.2, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 3094.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 3094.5, + "level": "partial" + }, + "generic (strict)": { + "us": 3153.2, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1653.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1653.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1653.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1538.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1461.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1428.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1461.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1505.8, + "level": "full" + }, + "insitu (copy)": { + "us": 1538.4, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 1598.8, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 1703.4, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1914.2, + "level": "no UTF-8" + }, + "Document": { + "us": 2615.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3816.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3816.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3816.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1061.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1061.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1061.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1793.6, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1793.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1793.6, + "level": "full" + }, + "owned (copy)": { + "us": 2514.9, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 860.5, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 860.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 860.5, + "level": "full" + }, + "editable (source numbers)": { + "us": 877.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 4746.7, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 4746.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 4746.7, + "level": "full" + }, + "parse": { + "us": 5667.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 1173.7, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 1173.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 1145.9, + "level": "full" + }, + "mut copy": { + "us": 1173.7, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 1179.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1102.2, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1102.2, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 5385.2, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 5287.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 5287.8, + "level": "partial" + }, + "generic (strict)": { + "us": 5385.2, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 2263.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2263.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2263.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2132.9, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 2132.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed)": { + "us": 2109.7, + "level": "full" + }, + "insitu (copy)": { + "us": 2132.9, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 2139.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2172.3, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 2253.9, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 2323.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2639.0, + "level": "no UTF-8" + }, + "Document": { + "us": 3083.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 5854.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5854.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5854.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1970.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1970.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1970.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 3891.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 3891.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 3891.2, + "level": "full" + }, + "owned (copy)": { + "us": 4690.0, + "level": "full" + } + } + } + } + }, + "minify": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 495.8, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 495.8, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 494.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 494.2, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 494.2, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 495.8, + "level": "full" + }, + "parse + dump": { + "us": 518.1, + "level": "full" + }, + "parse_copy + dump": { + "us": 575.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 4195.9, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 4195.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 4195.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + write", + "us": 625.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + write", + "us": 625.5, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 716.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 716.6, + "level": "full" + }, + "variants": { + "insitu (copy) + write": { + "us": 625.5, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 637.2, + "level": "full" + }, + "read + write": { + "us": 657.9, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 667.1, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 716.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 714.2, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 99.9, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 703.7, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 703.7, + "level": "full" + }, + "variants": { + "minify": { + "us": 99.9, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 703.7, + "level": "full" + }, + "DOM + to_string": { + "us": 714.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 675.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 675.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3684.7, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 442.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 442.0, + "level": "partial" + }, + "generic": { + "us": 3529.2, + "level": "partial" + }, + "generic (strict)": { + "us": 3684.7, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1974.2, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1974.2, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1889.4, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1889.4, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 1889.4, + "level": "full" + }, + "parse + serialize": { + "us": 1974.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 1949.4, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1879.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2412.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2267.0, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1879.7, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1941.4, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 1949.4, + "level": "full" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1949.4, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2236.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2267.0, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2412.6, + "level": "full" + }, + "SAX to Writer": { + "us": 2683.1, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 2793.4, + "level": "full" + }, + "Document + Writer": { + "us": 2887.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4012.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4012.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4012.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1000.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1000.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1000.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1888.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1888.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1888.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 1044.8, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 1044.8, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 1071.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 1071.1, + "level": "full" + }, + "variants": { + "parse + dump": { + "us": 1044.8, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 1046.8, + "level": "full" + }, + "read + dump (reused)": { + "us": 1071.1, + "level": "full" + }, + "parse_copy + dump": { + "us": 1177.8, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 5806.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 5806.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 5806.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 1217.9, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 1217.9, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 1314.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 1314.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 1159.8, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 1217.9, + "level": "full" + }, + "insitu (copy) + write": { + "us": 1265.0, + "level": "full" + }, + "read + write": { + "us": 1265.8, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 1314.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 1318.4, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 278.1, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 1318.1, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 1318.1, + "level": "full" + }, + "variants": { + "minify": { + "us": 278.1, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 1318.1, + "level": "full" + }, + "DOM + to_string": { + "us": 1318.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1417.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1417.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 5941.5, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1292.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1292.0, + "level": "partial" + }, + "generic (strict)": { + "us": 5941.5, + "level": "full" + }, + "generic": { + "us": 5978.0, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2525.2, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2525.2, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2498.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2498.2, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 2498.2, + "level": "full" + }, + "parse + serialize": { + "us": 2525.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 2382.4, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 2314.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2811.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 2811.2, + "level": "full" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 2314.5, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 2382.4, + "level": "full" + }, + "SAX to Writer (no encoding check)": { + "us": 2387.7, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2623.9, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 2755.5, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 2774.0, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2811.2, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2862.5, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 3119.6, + "level": "full" + }, + "Document + Writer": { + "us": 3228.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 6582.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6582.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6582.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2096.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2096.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2096.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 4196.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 4196.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 4196.0, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 2196.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 2196.2, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 5381.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 5381.2, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 2196.2, + "level": "full" + }, + "parse + dump": { + "us": 5240.0, + "level": "full" + }, + "read + dump (reused)": { + "us": 5381.2, + "level": "full" + }, + "parse_copy + dump": { + "us": 5650.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 16625.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 16625.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 16625.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 2900.7, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 2900.7, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 7057.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 7057.5, + "level": "full" + }, + "variants": { + "read (raw numbers) + write": { + "us": 2900.7, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 6701.2, + "level": "full" + }, + "insitu (copy) + write": { + "us": 6988.5, + "level": "full" + }, + "read + write": { + "us": 6999.3, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 7057.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 9135.2, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 311.9, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 8851.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 8851.4, + "level": "full" + }, + "variants": { + "minify": { + "us": 311.9, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 8851.4, + "level": "full" + }, + "DOM + to_string": { + "us": 9135.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 8958.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 8958.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 22138.1, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 2726.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 2726.4, + "level": "partial" + }, + "generic (strict)": { + "us": 22138.1, + "level": "full" + }, + "generic": { + "us": 22728.1, + "level": "partial" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 12747.7, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 12747.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 13260.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 13260.2, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 12747.7, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 13260.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (raw numbers)", + "us": 14400.4, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (raw numbers)", + "us": 14400.4, + "level": "full" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 21158.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 21158.4, + "level": "full" + }, + "variants": { + "SAX to Writer (raw numbers)": { + "us": 14400.4, + "level": "full" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 14666.2, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 19548.0, + "level": "full" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 19577.5, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 21158.4, + "level": "full" + }, + "SAX to Writer": { + "us": 21185.7, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 21372.9, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 22129.2, + "level": "no UTF-8" + }, + "Document + Writer": { + "us": 22260.0, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 22285.3, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 17306.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 17306.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 17306.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 7795.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 7795.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 7795.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 15716.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 15716.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 15716.2, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 143205.7, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 143205.7, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 109335.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 109335.3, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 109335.3, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 143205.7, + "level": "full" + }, + "parse + dump": { + "us": 143736.6, + "level": "full" + }, + "parse_copy + dump": { + "us": 180536.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 529559.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 529559.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 529559.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 188179.2, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 188179.2, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 98203.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 98203.6, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 98203.6, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 156604.6, + "level": "full" + }, + "read + write": { + "us": 188179.2, + "level": "full" + }, + "insitu (copy) + write": { + "us": 194880.4, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 198103.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 269597.1, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 42643.5, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 211456.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 211456.6, + "level": "full" + }, + "variants": { + "minify": { + "us": 42643.5, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 211456.6, + "level": "full" + }, + "DOM + to_string": { + "us": 269597.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 164630.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 164630.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 450321.8, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 97377.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 97377.0, + "level": "partial" + }, + "generic": { + "us": 438618.4, + "level": "partial" + }, + "generic (strict)": { + "us": 450321.8, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 314298.9, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 314298.9, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 267865.8, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 267865.8, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 267865.8, + "level": "full" + }, + "parse + serialize": { + "us": 314298.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 231978.8, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 224249.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 311567.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 304495.2, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 224249.3, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 231978.8, + "level": "full" + }, + "SAX to Writer (no encoding check)": { + "us": 271455.5, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 271842.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 304495.2, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 304609.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 311567.3, + "level": "full" + }, + "SAX to Writer": { + "us": 353200.1, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 367515.2, + "level": "full" + }, + "Document + Writer": { + "us": 387659.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 509701.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 509701.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 509701.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 215280.2, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 215280.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 215280.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 414376.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 414376.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 414376.9, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 2.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 2.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 2.4, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 2.4, + "level": "full" + }, + "read + dump (reused)": { + "us": 2.4, + "level": "full" + }, + "parse + dump": { + "us": 2.5, + "level": "full" + }, + "parse_copy + dump": { + "us": 2.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 19.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 19.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 19.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 2.9, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 2.9, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 2.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 2.6, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 2.6, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 2.8, + "level": "full" + }, + "read + write": { + "us": 2.9, + "level": "full" + }, + "insitu (copy) + write": { + "us": 2.9, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 2.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 3.7, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 0.5, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 3.3, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 3.3, + "level": "full" + }, + "variants": { + "minify": { + "us": 0.5, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 3.3, + "level": "full" + }, + "DOM + to_string": { + "us": 3.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 3.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 3.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 14.0, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1.9, + "level": "partial" + }, + "generic": { + "us": 13.5, + "level": "partial" + }, + "generic (strict)": { + "us": 14.0, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 8.6, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 8.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 8.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 8.2, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 8.2, + "level": "full" + }, + "parse + serialize": { + "us": 8.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 8.2, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 6.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 11.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 10.8, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 6.2, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 8.2, + "level": "full" + }, + "SAX to Writer (no encoding check)": { + "us": 9.5, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 10.0, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 10.8, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 11.3, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 11.5, + "level": "full" + }, + "SAX to Writer": { + "us": 13.7, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 13.9, + "level": "full" + }, + "Document + Writer": { + "us": 15.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 16.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 16.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 16.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 5.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 9.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 9.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 9.2, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 410.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 410.0, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 417.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 417.5, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 410.0, + "level": "full" + }, + "read + dump (reused)": { + "us": 417.5, + "level": "full" + }, + "parse + dump": { + "us": 423.3, + "level": "full" + }, + "parse_copy + dump": { + "us": 456.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 3605.1, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 3605.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 3605.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 542.4, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 542.4, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 540.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 540.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 518.2, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 540.0, + "level": "full" + }, + "read + write": { + "us": 542.4, + "level": "full" + }, + "insitu (copy) + write": { + "us": 545.2, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 547.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 654.5, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 67.7, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 652.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 652.4, + "level": "full" + }, + "variants": { + "minify": { + "us": 67.7, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 652.4, + "level": "full" + }, + "DOM + to_string": { + "us": 654.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 526.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 526.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3043.3, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 350.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 350.0, + "level": "partial" + }, + "generic": { + "us": 2990.2, + "level": "partial" + }, + "generic (strict)": { + "us": 3043.3, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1668.0, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1668.0, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1661.0, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1661.0, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 1661.0, + "level": "full" + }, + "parse + serialize": { + "us": 1668.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 1438.5, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1420.4, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2079.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 1952.6, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1420.4, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 1438.5, + "level": "full" + }, + "SAX to Writer (no encoding check)": { + "us": 1692.4, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1752.8, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 1929.4, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 1952.6, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2079.8, + "level": "full" + }, + "SAX to Writer": { + "us": 2365.1, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 2441.8, + "level": "full" + }, + "Document + Writer": { + "us": 2681.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3887.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3887.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3887.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 864.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 864.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 864.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1839.7, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1839.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1839.7, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 746.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 746.3, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 760.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 760.4, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 746.3, + "level": "full" + }, + "read + dump (reused)": { + "us": 760.4, + "level": "full" + }, + "parse + dump": { + "us": 760.8, + "level": "full" + }, + "parse_copy + dump": { + "us": 795.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 5370.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 5370.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 5370.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 773.7, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 773.7, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 811.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 811.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 772.8, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 773.7, + "level": "full" + }, + "insitu (copy) + write": { + "us": 807.0, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 811.6, + "level": "full" + }, + "read + write": { + "us": 818.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 1160.0, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 69.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 1163.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 1163.9, + "level": "full" + }, + "variants": { + "minify": { + "us": 69.3, + "level": "partial" + }, + "DOM + to_string": { + "us": 1160.0, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 1163.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1097.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1097.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 5181.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 652.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 652.4, + "level": "partial" + }, + "generic": { + "us": 5048.5, + "level": "partial" + }, + "generic (strict)": { + "us": 5181.4, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2193.8, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2193.8, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2174.7, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2174.7, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 2174.7, + "level": "full" + }, + "parse + serialize": { + "us": 2193.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 1849.8, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream)", + "us": 1849.8, + "level": "full" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2614.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 2614.0, + "level": "full" + }, + "variants": { + "SAX to Writer (string stream)": { + "us": 1849.8, + "level": "full" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 1880.8, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 2174.6, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2451.7, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 2529.6, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 2586.4, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2614.0, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2662.9, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 2886.8, + "level": "full" + }, + "Document + Writer": { + "us": 3109.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 5737.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5737.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5737.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1729.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1729.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1729.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 3903.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 3903.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 3903.9, + "level": "full" + } + } + } + } + }, + "write": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 140.4, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 140.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 140.4, + "level": "n/a" + }, + "dump": { + "us": 155.7, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 443.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 443.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 443.8, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 215.3, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 215.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 215.3, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 361.3, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 361.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 361.3, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 678.3, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 678.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 678.3, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 248.6, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 248.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 248.6, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 381.2, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 381.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 381.2, + "level": "n/a" + }, + "generic (strict)": { + "us": 450.7, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 469.0, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 469.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 469.0, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 549.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 549.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 549.8, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 434.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 434.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 434.3, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 582.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 582.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 582.5, + "level": "n/a" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 230.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 230.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 230.0, + "level": "n/a" + }, + "dump": { + "us": 250.9, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 639.6, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 639.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 639.6, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 318.9, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 318.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 318.9, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 613.9, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 613.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 613.9, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 979.3, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 979.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 979.3, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 509.4, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 509.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 509.4, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 730.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 730.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 730.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 738.7, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 829.8, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 829.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 829.8, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 887.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 887.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 887.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 927.2, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 927.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 927.2, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 799.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 799.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 799.5, + "level": "n/a" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 823.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 823.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 823.3, + "level": "n/a" + }, + "dump": { + "us": 3842.2, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 4088.6, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 4088.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 4088.6, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 3359.8, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 3359.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 3359.8, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 5609.3, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 5609.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 5609.3, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 9095.1, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 9095.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 9095.1, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 5074.3, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 5074.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 5074.3, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 4070.6, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 4070.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 4070.6, + "level": "n/a" + }, + "generic (strict)": { + "us": 4085.7, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 5658.6, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 5658.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 5658.6, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4005.1, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 4005.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4005.1, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 3987.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 3987.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3987.3, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 5146.6, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 5146.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 5146.6, + "level": "n/a" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 65375.7, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 65375.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 65375.7, + "level": "n/a" + }, + "dump": { + "us": 67769.0, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 117316.2, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 117316.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 117316.2, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 66669.1, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 66669.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 66669.1, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 158492.1, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 158492.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 158492.1, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 131408.2, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 131408.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 131408.2, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 69916.0, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 69916.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 69916.0, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 131946.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 131946.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 131946.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 144261.7, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 144173.9, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 144173.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 144173.9, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 134162.6, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 134162.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 134162.6, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 109175.6, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 109175.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 109175.6, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 122623.4, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 122623.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 122623.4, + "level": "n/a" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 0.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 0.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 0.8, + "level": "n/a" + }, + "dump": { + "us": 0.9, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 1.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 1.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 1.8, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 1.3, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 1.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 1.3, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 1.8, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 1.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 1.8, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 3.8, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 3.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 3.8, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 1.6, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 1.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 1.6, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 2.0, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 2.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 2.0, + "level": "n/a" + }, + "generic (strict)": { + "us": 2.3, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 2.4, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 2.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 2.4, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 3.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 2.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2.8, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 2.8, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 2.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 2.8, + "level": "n/a" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 133.7, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 133.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 133.7, + "level": "n/a" + }, + "dump": { + "us": 150.4, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 429.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 429.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 429.0, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 201.3, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 201.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 201.3, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 349.4, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 349.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 349.4, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 620.4, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 620.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 620.4, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 228.6, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 228.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 228.6, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 377.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 377.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 377.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 415.3, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 456.4, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 456.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 456.4, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 550.4, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 550.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 550.4, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 434.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 434.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 434.7, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 580.2, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 580.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 580.2, + "level": "n/a" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 240.1, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 240.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 240.1, + "level": "n/a" + }, + "dump": { + "us": 271.3, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 675.9, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 675.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 675.9, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 347.7, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 347.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 347.7, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 648.5, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 648.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 648.5, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 1057.5, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 1057.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 1057.5, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 532.0, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 532.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 532.0, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 784.1, + "level": "n/a" + }, + "best_any": { + "variant": "generic (strict)", + "us": 784.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 784.1, + "level": "n/a" + }, + "generic": { + "us": 796.7, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 907.4, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 907.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 907.4, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 828.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 828.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 828.7, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 889.5, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 889.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 889.5, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 765.0, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 765.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 765.0, + "level": "n/a" + } + } + } + } + } +} diff --git a/docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc13.json b/docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc13.json new file mode 100644 index 000000000..454c67200 --- /dev/null +++ b/docs/mkdocs/scripts/figures/data/perf_usecases_x86-gcc13.json @@ -0,0 +1,14413 @@ +{ + "validate": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 271.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 271.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 313.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 313.2, + "level": "full" + }, + "variants": { + "accept": { + "us": 271.0, + "level": "full" + }, + "read (reused)": { + "us": 313.2, + "level": "full" + }, + "parse": { + "us": 319.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 677.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 677.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 677.0, + "level": "full" + }, + "parse": { + "us": 3472.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 390.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 390.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 396.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 396.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 347.9, + "level": "full" + }, + "insitu (copy)": { + "us": 390.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 394.2, + "level": "full" + }, + "read": { + "us": 395.0, + "level": "full" + }, + "read (reused allocator)": { + "us": 396.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 311.2, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 311.2, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 312.2, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 312.2, + "level": "full" + }, + "variants": { + "DOM": { + "us": 311.2, + "level": "full" + }, + "DOM (reused)": { + "us": 312.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 408.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 408.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 590.1, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 590.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 590.1, + "level": "full" + }, + "generic (double)": { + "us": 2313.6, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2328.4, + "level": "full" + }, + "generic": { + "us": 2968.4, + "level": "partial" + }, + "generic (strict)": { + "us": 2986.2, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 709.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 709.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 721.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 721.3, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 709.8, + "level": "full" + }, + "SAX (reused)": { + "us": 721.3, + "level": "full" + }, + "SAX": { + "us": 721.9, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1416.7, + "level": "full" + }, + "parser (reused)": { + "us": 1426.9, + "level": "full" + }, + "parse": { + "us": 1436.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1594.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1116.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1569.9, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1526.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1082.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1116.1, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1195.8, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1220.0, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1354.2, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1397.4, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1428.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1495.6, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1526.8, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1551.7, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1569.9, + "level": "full" + }, + "insitu (copy)": { + "us": 1594.8, + "level": "full" + }, + "SAX (string stream)": { + "us": 2184.6, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 2236.5, + "level": "full" + }, + "SAX (default precision)": { + "us": 2253.6, + "level": "full" + }, + "SAX": { + "us": 2307.9, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2354.1, + "level": "full" + }, + "Document": { + "us": 2387.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 624.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 483.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 483.8, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 624.3, + "level": "full" + }, + "Value": { + "us": 3430.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 501.3, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 501.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 501.3, + "level": "full" + }, + "Value": { + "us": 558.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 567.2, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 567.2, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 591.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 591.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 567.2, + "level": "full" + }, + "tape (reused)": { + "us": 591.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1274.3, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 608.8, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 608.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 758.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 758.1, + "level": "full" + }, + "variants": { + "accept": { + "us": 608.8, + "level": "full" + }, + "read (reused)": { + "us": 758.1, + "level": "full" + }, + "parse": { + "us": 805.9, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 1432.8, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1432.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 1432.8, + "level": "full" + }, + "parse": { + "us": 5630.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 997.4, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 997.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1139.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1139.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 878.3, + "level": "full" + }, + "read (raw numbers)": { + "us": 997.4, + "level": "full" + }, + "read": { + "us": 1023.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1042.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 1139.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 780.3, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 780.3, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 788.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 788.4, + "level": "full" + }, + "variants": { + "DOM": { + "us": 780.3, + "level": "full" + }, + "DOM (reused)": { + "us": 788.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1027.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1027.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1545.1, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1545.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1545.1, + "level": "full" + }, + "generic (double)": { + "us": 4117.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 4239.7, + "level": "full" + }, + "generic (strict)": { + "us": 6202.0, + "level": "full" + }, + "generic": { + "us": 6281.3, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 969.1, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 969.1, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 989.0, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 989.0, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 969.1, + "level": "full" + }, + "SAX (reused)": { + "us": 989.0, + "level": "full" + }, + "SAX": { + "us": 1016.1, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1867.4, + "level": "full" + }, + "parser (reused)": { + "us": 1979.7, + "level": "full" + }, + "parse": { + "us": 1987.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 2214.5, + "level": "full" + }, + "best_any": { + "variant": "SAX (default precision) (no encoding check)", + "us": 1570.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1994.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1994.7, + "level": "full" + }, + "variants": { + "SAX (default precision) (no encoding check)": { + "us": 1570.5, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1734.1, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 1835.5, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1991.2, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1994.7, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 2008.0, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 2044.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2045.1, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2062.6, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2070.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2209.8, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 2214.5, + "level": "full" + }, + "SAX (default precision)": { + "us": 2242.6, + "level": "full" + }, + "SAX": { + "us": 2338.1, + "level": "full" + }, + "insitu (copy)": { + "us": 2384.0, + "level": "full" + }, + "SAX (string stream)": { + "us": 2620.9, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2692.4, + "level": "full" + }, + "Document": { + "us": 2811.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 1440.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1370.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1370.0, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 1440.0, + "level": "full" + }, + "Value": { + "us": 5622.3, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 969.7, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 969.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 969.7, + "level": "full" + }, + "Value": { + "us": 1192.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1429.6, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1429.6, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1442.3, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1442.3, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 1429.6, + "level": "full" + }, + "tape (reused)": { + "us": 1442.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 3462.6, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 1011.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1011.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1485.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1485.7, + "level": "full" + }, + "variants": { + "accept": { + "us": 1011.0, + "level": "full" + }, + "parse": { + "us": 1482.6, + "level": "full" + }, + "read (reused)": { + "us": 1485.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 4584.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 4584.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 4584.1, + "level": "full" + }, + "parse": { + "us": 11889.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 2255.5, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 2255.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 5646.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 5646.5, + "level": "full" + }, + "variants": { + "read (raw numbers)": { + "us": 2255.5, + "level": "full" + }, + "insitu (copy)": { + "us": 5502.1, + "level": "full" + }, + "read": { + "us": 5527.5, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 5629.1, + "level": "full" + }, + "read (reused allocator)": { + "us": 5646.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 3350.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 3350.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 3313.9, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 3313.9, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 3313.9, + "level": "full" + }, + "DOM": { + "us": 3350.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3622.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3622.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 1979.8, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 1979.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 1979.8, + "level": "full" + }, + "generic (double)": { + "us": 10134.5, + "level": "partial" + }, + "generic (double, strict)": { + "us": 10396.5, + "level": "full" + }, + "generic": { + "us": 19520.5, + "level": "partial" + }, + "generic (strict)": { + "us": 19829.4, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 1717.9, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 1717.9, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 5508.4, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 5508.4, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 1717.9, + "level": "full" + }, + "parse (numbers: none)": { + "us": 2958.7, + "level": "full" + }, + "SAX": { + "us": 5462.1, + "level": "full" + }, + "SAX (reused)": { + "us": 5508.4, + "level": "full" + }, + "parser (reused)": { + "us": 7315.4, + "level": "full" + }, + "parse": { + "us": 7324.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream, default precision)", + "us": 4104.1, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision)", + "us": 4104.1, + "level": "full" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 12066.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 11773.4, + "level": "no UTF-8" + }, + "variants": { + "SAX (string stream, default precision)": { + "us": 4104.1, + "level": "full" + }, + "SAX (default precision)": { + "us": 4222.7, + "level": "full" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 4363.6, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 4755.9, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 10579.3, + "level": "no UTF-8" + }, + "SAX (raw numbers)": { + "us": 10969.3, + "level": "full" + }, + "SAX (string stream) (no encoding check)": { + "us": 11047.5, + "level": "no UTF-8" + }, + "SAX": { + "us": 11206.5, + "level": "full" + }, + "SAX (string stream)": { + "us": 11404.7, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 11434.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 11461.5, + "level": "full" + }, + "Document": { + "us": 11730.2, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 11766.2, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 11773.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 11817.2, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 11901.4, + "level": "full" + }, + "Document (no encoding check)": { + "us": 12056.3, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 12066.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2406.0, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 2313.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 2313.5, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2406.0, + "level": "full" + }, + "Value": { + "us": 12777.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 2249.1, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 2249.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 2249.1, + "level": "full" + }, + "Value": { + "us": 3650.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 4358.8, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 4358.8, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 4188.3, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 4188.3, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 4188.3, + "level": "full" + }, + "tape (copy)": { + "us": 4358.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 9740.4, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 34722.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 34722.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 42164.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 42164.4, + "level": "full" + }, + "variants": { + "accept": { + "us": 34722.1, + "level": "full" + }, + "read (reused)": { + "us": 42164.4, + "level": "full" + }, + "parse": { + "us": 76936.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 73561.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 73561.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 73561.0, + "level": "full" + }, + "parse": { + "us": 382491.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 128490.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 128490.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 65056.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 65056.4, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 65056.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 90958.6, + "level": "full" + }, + "insitu (copy)": { + "us": 128490.1, + "level": "full" + }, + "read (raw numbers)": { + "us": 128990.8, + "level": "full" + }, + "read": { + "us": 131323.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 116703.6, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 116703.6, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 48271.1, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 48271.1, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 48271.1, + "level": "full" + }, + "DOM": { + "us": 116703.6, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 96080.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 96080.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 76009.4, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 76009.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 76009.4, + "level": "full" + }, + "generic (double, strict)": { + "us": 231870.6, + "level": "full" + }, + "generic (double)": { + "us": 233240.2, + "level": "partial" + }, + "generic (strict)": { + "us": 329832.4, + "level": "full" + }, + "generic": { + "us": 331531.4, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 61476.5, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 61476.5, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 62717.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 62717.1, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 61476.5, + "level": "full" + }, + "SAX": { + "us": 61948.9, + "level": "full" + }, + "SAX (reused)": { + "us": 62717.1, + "level": "full" + }, + "parser (reused)": { + "us": 134695.0, + "level": "full" + }, + "parse": { + "us": 188572.0, + "level": "full" + }, + "parse (numbers: none)": { + "us": 190538.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 214648.7, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 130900.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 191448.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 186590.7, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 110856.4, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 130900.6, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 134485.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 154657.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 168746.8, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 171293.7, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 171936.5, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 177498.7, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 186590.7, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 188878.8, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 191448.2, + "level": "full" + }, + "insitu (copy)": { + "us": 214648.7, + "level": "full" + }, + "SAX (string stream)": { + "us": 250121.1, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 251293.4, + "level": "full" + }, + "SAX (default precision)": { + "us": 289135.3, + "level": "full" + }, + "SAX": { + "us": 290081.1, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 301799.9, + "level": "full" + }, + "Document": { + "us": 305476.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 64719.7, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 58247.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 58247.3, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 64719.7, + "level": "full" + }, + "Value": { + "us": 389667.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 54369.2, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 54369.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 54369.2, + "level": "full" + }, + "Value": { + "us": 113483.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 207551.3, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 207551.3, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 139519.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 139519.7, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 139519.7, + "level": "full" + }, + "tape (copy)": { + "us": 207551.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 277163.2, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 1.2, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "accept": { + "us": 1.2, + "level": "full" + }, + "read (reused)": { + "us": 1.4, + "level": "full" + }, + "parse": { + "us": 1.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 3.3, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 3.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 3.3, + "level": "full" + }, + "parse": { + "us": 18.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.6, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.6, + "level": "full" + }, + "variants": { + "read": { + "us": 1.6, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1.6, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.6, + "level": "full" + }, + "insitu (copy)": { + "us": 1.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 1.8, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 1.8, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 1.4, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 1.4, + "level": "full" + }, + "DOM": { + "us": 1.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 2.3, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 2.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 2.3, + "level": "full" + }, + "generic (double, strict)": { + "us": 8.4, + "level": "full" + }, + "generic (double)": { + "us": 8.6, + "level": "partial" + }, + "generic": { + "us": 13.1, + "level": "partial" + }, + "generic (strict)": { + "us": 13.2, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 3.2, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 3.2, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 3.2, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 3.2, + "level": "full" + }, + "variants": { + "SAX": { + "us": 3.2, + "level": "full" + }, + "SAX (numbers: none)": { + "us": 3.2, + "level": "full" + }, + "SAX (reused)": { + "us": 3.2, + "level": "full" + }, + "parse": { + "us": 6.6, + "level": "full" + }, + "parse (numbers: none)": { + "us": 6.6, + "level": "full" + }, + "parser (reused)": { + "us": 6.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 7.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 3.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 8.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy) (no encoding check)": { + "us": 3.7, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 3.8, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 4.2, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 4.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 6.9, + "level": "full" + }, + "insitu (copy)": { + "us": 7.0, + "level": "full" + }, + "SAX (default precision) (no encoding check)": { + "us": 7.2, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 7.4, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 7.6, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.8, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 8.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 8.4, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 10.5, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 10.8, + "level": "full" + }, + "SAX": { + "us": 12.2, + "level": "full" + }, + "SAX (default precision)": { + "us": 12.4, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 12.4, + "level": "full" + }, + "Document": { + "us": 13.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.9, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 2.4, + "level": "full" + }, + "Value": { + "us": 12.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 1.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 1.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 1.8, + "level": "full" + }, + "Value": { + "us": 2.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 2.9, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 2.9, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 2.6, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 2.6, + "level": "full" + }, + "variants": { + "tape (reused)": { + "us": 2.6, + "level": "full" + }, + "tape (copy)": { + "us": 2.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 5.7, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 219.0, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 219.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 260.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 260.5, + "level": "full" + }, + "variants": { + "accept": { + "us": 219.0, + "level": "full" + }, + "read (reused)": { + "us": 260.5, + "level": "full" + }, + "parse": { + "us": 268.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 551.1, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 551.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 551.1, + "level": "full" + }, + "parse": { + "us": 3133.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 331.1, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 331.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 330.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 330.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 296.8, + "level": "full" + }, + "read (reused allocator)": { + "us": 330.1, + "level": "full" + }, + "read": { + "us": 331.1, + "level": "full" + }, + "insitu (copy)": { + "us": 334.0, + "level": "full" + }, + "read (raw numbers)": { + "us": 334.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 288.9, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 288.9, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 287.8, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 287.8, + "level": "full" + }, + "variants": { + "DOM (reused)": { + "us": 287.8, + "level": "full" + }, + "DOM": { + "us": 288.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 288.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 288.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 450.8, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 450.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 450.8, + "level": "full" + }, + "generic (double)": { + "us": 2051.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2062.3, + "level": "full" + }, + "generic (strict)": { + "us": 2769.7, + "level": "full" + }, + "generic": { + "us": 2775.2, + "level": "partial" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 587.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 587.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 600.6, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 600.6, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 587.8, + "level": "full" + }, + "SAX (reused)": { + "us": 600.6, + "level": "full" + }, + "SAX": { + "us": 601.3, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1284.4, + "level": "full" + }, + "parser (reused)": { + "us": 1289.6, + "level": "full" + }, + "parse": { + "us": 1298.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1259.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 844.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1501.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1401.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 804.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 844.1, + "level": "no UTF-8" + }, + "SAX (string stream, default precision) (no encoding check)": { + "us": 960.4, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 978.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1226.0, + "level": "full" + }, + "insitu (copy)": { + "us": 1259.7, + "level": "full" + }, + "SAX (default precision) (no encoding check)": { + "us": 1279.9, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1288.3, + "level": "no UTF-8" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1324.1, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1401.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1434.4, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1501.7, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 1867.0, + "level": "full" + }, + "SAX (string stream)": { + "us": 1886.3, + "level": "full" + }, + "SAX (default precision)": { + "us": 2145.8, + "level": "full" + }, + "SAX": { + "us": 2154.2, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2179.2, + "level": "full" + }, + "Document": { + "us": 2271.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 475.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 347.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 347.5, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 475.9, + "level": "full" + }, + "Value": { + "us": 3319.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 336.8, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 336.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 336.8, + "level": "full" + }, + "Value": { + "us": 416.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 516.9, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 516.9, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 541.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 541.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 516.9, + "level": "full" + }, + "tape (reused)": { + "us": 541.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1254.2, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "accept", + "us": 327.9, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 327.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 523.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 523.6, + "level": "full" + }, + "variants": { + "accept": { + "us": 327.9, + "level": "full" + }, + "read (reused)": { + "us": 523.6, + "level": "full" + }, + "parse": { + "us": 523.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "accept", + "us": 1030.3, + "level": "full" + }, + "best_any": { + "variant": "accept", + "us": 1030.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "accept": { + "us": 1030.3, + "level": "full" + }, + "parse": { + "us": 4688.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 507.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 507.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 507.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 507.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 472.2, + "level": "full" + }, + "insitu (copy)": { + "us": 507.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 507.8, + "level": "full" + }, + "read": { + "us": 508.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 520.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 573.6, + "level": "full" + }, + "best_any": { + "variant": "DOM", + "us": 573.6, + "level": "full" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 574.7, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused)", + "us": 574.7, + "level": "full" + }, + "variants": { + "DOM": { + "us": 573.6, + "level": "full" + }, + "DOM (reused)": { + "us": 574.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 692.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 692.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "validate_json", + "us": 623.9, + "level": "full" + }, + "best_any": { + "variant": "validate_json", + "us": 623.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "validate_json": { + "us": 623.9, + "level": "full" + }, + "generic (double, strict)": { + "us": 3101.1, + "level": "full" + }, + "generic (double)": { + "us": 3143.7, + "level": "partial" + }, + "generic": { + "us": 4862.1, + "level": "partial" + }, + "generic (strict)": { + "us": 4884.8, + "level": "full" + } + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX (numbers: none)", + "us": 574.7, + "level": "full" + }, + "best_any": { + "variant": "SAX (numbers: none)", + "us": 574.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 652.2, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 652.2, + "level": "full" + }, + "variants": { + "SAX (numbers: none)": { + "us": 574.7, + "level": "full" + }, + "SAX": { + "us": 651.6, + "level": "full" + }, + "SAX (reused)": { + "us": 652.2, + "level": "full" + }, + "parse (numbers: none)": { + "us": 1425.2, + "level": "full" + }, + "parser (reused)": { + "us": 1532.7, + "level": "full" + }, + "parse": { + "us": 1533.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1633.2, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream, default precision) (no encoding check)", + "us": 1182.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1761.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1761.6, + "level": "full" + }, + "variants": { + "SAX (string stream, default precision) (no encoding check)": { + "us": 1182.1, + "level": "no UTF-8" + }, + "SAX (default precision) (no encoding check)": { + "us": 1202.5, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1391.7, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1397.0, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1404.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1437.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1606.0, + "level": "full" + }, + "SAX (raw numbers) (no encoding check)": { + "us": 1616.8, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1633.2, + "level": "full" + }, + "SAX (string stream, default precision)": { + "us": 1669.1, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1761.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1770.4, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1772.7, + "level": "no UTF-8" + }, + "SAX (default precision)": { + "us": 1795.8, + "level": "full" + }, + "SAX (string stream)": { + "us": 1918.0, + "level": "full" + }, + "SAX": { + "us": 1945.9, + "level": "full" + }, + "SAX (raw numbers)": { + "us": 2178.1, + "level": "full" + }, + "Document": { + "us": 2338.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + IgnoredAny", + "us": 647.4, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 641.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 641.0, + "level": "no UTF-8" + }, + "from_utf8 + IgnoredAny": { + "us": 647.4, + "level": "full" + }, + "Value": { + "us": 5357.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "IgnoredAny", + "us": 610.9, + "level": "full" + }, + "best_any": { + "variant": "IgnoredAny", + "us": 610.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "IgnoredAny": { + "us": 610.9, + "level": "full" + }, + "Value": { + "us": 903.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "tape (copy)", + "us": 1075.7, + "level": "full" + }, + "best_any": { + "variant": "tape (copy)", + "us": 1075.7, + "level": "full" + }, + "best_reused": { + "variant": "tape (reused)", + "us": 1077.7, + "level": "full" + }, + "best_reused_any": { + "variant": "tape (reused)", + "us": 1077.7, + "level": "full" + }, + "variants": { + "tape (copy)": { + "us": 1075.7, + "level": "full" + }, + "tape (reused)": { + "us": 1077.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 3360.4, + "level": "full" + } + } + } + } + }, + "sum": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 391.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 391.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 384.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 384.8, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 384.8, + "level": "full" + }, + "parse": { + "us": 391.8, + "level": "full" + }, + "parse_copy": { + "us": 430.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 796.6, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 796.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 796.6, + "level": "full" + }, + "parse": { + "us": 3537.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 443.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 443.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 449.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 449.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 407.0, + "level": "full" + }, + "insitu (copy)": { + "us": 443.8, + "level": "full" + }, + "read": { + "us": 446.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 449.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 356.1, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 356.1, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 355.8, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 355.8, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 355.8, + "level": "full" + }, + "On-Demand": { + "us": 356.1, + "level": "full" + }, + "DOM (reused)": { + "us": 428.7, + "level": "full" + }, + "DOM": { + "us": 429.9, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 460.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 460.5, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2344.7, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 2338.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 2338.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2344.7, + "level": "full" + }, + "lazy_json": { + "us": 2953.9, + "level": "partial" + }, + "generic": { + "us": 3048.3, + "level": "partial" + }, + "generic (strict)": { + "us": 3065.0, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 733.7, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 733.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 733.7, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 733.7, + "level": "full" + }, + "variants": { + "SAX": { + "us": 733.7, + "level": "full" + }, + "SAX (reused)": { + "us": 733.7, + "level": "full" + }, + "parser (reused)": { + "us": 1494.8, + "level": "full" + }, + "parse": { + "us": 1509.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1656.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1170.4, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1637.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1554.3, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1129.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1170.4, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1254.3, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1369.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1548.2, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1554.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1615.8, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1637.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1656.5, + "level": "full" + }, + "SAX (string stream)": { + "us": 2195.3, + "level": "full" + }, + "SAX": { + "us": 2276.2, + "level": "full" + }, + "Document": { + "us": 2410.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1311.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1311.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1311.0, + "level": "full" + }, + "Value": { + "us": 3539.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 501.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 501.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 501.0, + "level": "full" + }, + "Value": { + "us": 813.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 681.3, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 681.3, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1417.9, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1417.9, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 681.3, + "level": "full" + }, + "borrowed (copy)": { + "us": 1398.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 1417.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 946.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 946.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 947.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 947.2, + "level": "full" + }, + "variants": { + "parse": { + "us": 946.2, + "level": "full" + }, + "read (reused)": { + "us": 947.2, + "level": "full" + }, + "parse_copy": { + "us": 1060.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 1547.8, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 1547.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 1547.8, + "level": "full" + }, + "parse": { + "us": 5365.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 1155.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 1155.1, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1191.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1191.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1045.4, + "level": "full" + }, + "insitu (copy)": { + "us": 1155.1, + "level": "full" + }, + "read": { + "us": 1156.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 1191.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 812.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 812.0, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 811.7, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 811.7, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 811.7, + "level": "full" + }, + "On-Demand": { + "us": 812.0, + "level": "full" + }, + "DOM": { + "us": 1217.1, + "level": "full" + }, + "DOM (reused)": { + "us": 1222.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1209.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1209.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 4079.9, + "level": "full" + }, + "best_any": { + "variant": "generic (double)", + "us": 4041.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double)": { + "us": 4041.2, + "level": "partial" + }, + "generic (double, strict)": { + "us": 4079.9, + "level": "full" + }, + "generic": { + "us": 5798.0, + "level": "partial" + }, + "generic (strict)": { + "us": 5979.2, + "level": "full" + }, + "lazy_json": { + "us": 13446.0, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 1030.4, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 1030.4, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 1028.8, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 1028.8, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 1028.8, + "level": "full" + }, + "SAX": { + "us": 1030.4, + "level": "full" + }, + "parser (reused)": { + "us": 2055.5, + "level": "full" + }, + "parse": { + "us": 2059.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX", + "us": 2340.1, + "level": "full" + }, + "best_any": { + "variant": "SAX (no encoding check)", + "us": 1743.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 2169.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 2148.8, + "level": "no UTF-8" + }, + "variants": { + "SAX (no encoding check)": { + "us": 1743.1, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1879.1, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1979.5, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2084.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2114.5, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2148.8, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 2169.4, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2290.0, + "level": "full" + }, + "SAX": { + "us": 2340.1, + "level": "full" + }, + "insitu (copy)": { + "us": 2396.5, + "level": "full" + }, + "SAX (string stream)": { + "us": 2466.4, + "level": "full" + }, + "Document": { + "us": 2683.7, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 2287.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2287.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2287.8, + "level": "full" + }, + "Value": { + "us": 5984.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 1122.9, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1122.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1122.9, + "level": "full" + }, + "Value": { + "us": 1829.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 1649.9, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 1649.9, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3680.4, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3680.4, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 1649.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 3653.1, + "level": "full" + }, + "borrowed (reused)": { + "us": 3680.4, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 3887.9, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 3887.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 3880.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 3880.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 3880.6, + "level": "full" + }, + "parse": { + "us": 3887.9, + "level": "full" + }, + "parse_copy": { + "us": 4041.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 6003.5, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 6003.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 6003.5, + "level": "full" + }, + "parse": { + "us": 12388.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 6101.7, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 6101.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 6126.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 6126.8, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 6021.1, + "level": "full" + }, + "read": { + "us": 6101.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 6126.8, + "level": "full" + }, + "insitu (copy)": { + "us": 6174.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 3435.3, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 3435.3, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 3358.3, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 3358.3, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 3358.3, + "level": "full" + }, + "On-Demand": { + "us": 3435.3, + "level": "full" + }, + "DOM": { + "us": 4793.8, + "level": "full" + }, + "DOM (reused)": { + "us": 4838.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 4295.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 4295.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 10575.7, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 10575.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 10575.7, + "level": "full" + }, + "generic (double)": { + "us": 10910.0, + "level": "partial" + }, + "generic": { + "us": 20137.8, + "level": "partial" + }, + "lazy_json": { + "us": 20195.3, + "level": "partial" + }, + "generic (strict)": { + "us": 20606.8, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 6102.7, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 6102.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 5992.8, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 5992.8, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 5992.8, + "level": "full" + }, + "SAX": { + "us": 6102.7, + "level": "full" + }, + "parse": { + "us": 7598.8, + "level": "full" + }, + "parser (reused)": { + "us": 7637.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX (string stream)", + "us": 11182.8, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 11109.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 12160.8, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 12160.8, + "level": "full" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 11109.0, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 11182.8, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 11228.8, + "level": "no UTF-8" + }, + "SAX": { + "us": 11324.8, + "level": "full" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 11818.9, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 11895.4, + "level": "full" + }, + "insitu (copy)": { + "us": 12054.3, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 12112.7, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 12160.8, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 12175.0, + "level": "no UTF-8" + }, + "Document": { + "us": 12286.6, + "level": "full" + }, + "Document (no encoding check)": { + "us": 12496.0, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 7126.8, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 7126.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 7126.8, + "level": "full" + }, + "Value": { + "us": 13663.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 4397.1, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4397.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4397.1, + "level": "full" + }, + "Value": { + "us": 7133.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 5083.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 5083.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 10643.9, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 10643.9, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 5083.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 10643.9, + "level": "full" + }, + "borrowed (copy)": { + "us": 10771.4, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 89043.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 89043.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 53108.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 53108.4, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 53108.4, + "level": "full" + }, + "parse": { + "us": 89043.5, + "level": "full" + }, + "parse_copy": { + "us": 135380.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 101516.2, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 101516.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 101516.2, + "level": "full" + }, + "parse": { + "us": 413745.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 142879.7, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 142879.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 74378.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 74378.1, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 74378.1, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 99764.3, + "level": "full" + }, + "read": { + "us": 142879.7, + "level": "full" + }, + "insitu (copy)": { + "us": 144535.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 96250.5, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 96250.5, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 49746.2, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 49746.2, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 49746.2, + "level": "full" + }, + "DOM (reused)": { + "us": 62790.8, + "level": "full" + }, + "On-Demand": { + "us": 96250.5, + "level": "full" + }, + "DOM": { + "us": 135192.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 107092.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 107092.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 250685.1, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 231181.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 231181.0, + "level": "partial" + }, + "generic (double)": { + "us": 247067.6, + "level": "partial" + }, + "generic (double, strict)": { + "us": 250685.1, + "level": "full" + }, + "generic (strict)": { + "us": 347977.1, + "level": "full" + }, + "generic": { + "us": 348741.8, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 64381.8, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 64381.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 65835.9, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 65835.9, + "level": "full" + }, + "variants": { + "SAX": { + "us": 64381.8, + "level": "full" + }, + "SAX (reused)": { + "us": 65835.9, + "level": "full" + }, + "parser (reused)": { + "us": 150275.9, + "level": "full" + }, + "parse": { + "us": 209907.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 225716.3, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 134512.4, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 210147.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 199382.8, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 119705.8, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 134512.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 166643.2, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 173115.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 181500.1, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 199382.8, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 208113.1, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 210147.4, + "level": "full" + }, + "insitu (copy)": { + "us": 225716.3, + "level": "full" + }, + "SAX (string stream)": { + "us": 259850.8, + "level": "full" + }, + "SAX": { + "us": 290353.3, + "level": "full" + }, + "Document": { + "us": 323477.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 129497.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 129497.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 129497.0, + "level": "full" + }, + "Value": { + "us": 403258.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 59583.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 59583.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 59583.3, + "level": "full" + }, + "Value": { + "us": 139337.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 210185.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 210185.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 220283.6, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 220283.6, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 210185.2, + "level": "full" + }, + "borrowed (reused)": { + "us": 220283.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 282561.7, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.9, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.9, + "level": "full" + }, + "parse": { + "us": 2.0, + "level": "full" + }, + "parse_copy": { + "us": 2.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 4.0, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 4.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 4.0, + "level": "full" + }, + "parse": { + "us": 17.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 2.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.9, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 1.9, + "level": "full" + }, + "read": { + "us": 2.0, + "level": "full" + }, + "insitu (copy)": { + "us": 2.0, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 2.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 2.0, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 1.7, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 1.7, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 1.7, + "level": "full" + }, + "On-Demand": { + "us": 2.0, + "level": "full" + }, + "DOM (reused)": { + "us": 2.3, + "level": "full" + }, + "DOM": { + "us": 2.4, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 9.0, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 6.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 6.4, + "level": "partial" + }, + "generic (double)": { + "us": 9.0, + "level": "partial" + }, + "generic (double, strict)": { + "us": 9.0, + "level": "full" + }, + "generic": { + "us": 13.4, + "level": "partial" + }, + "generic (strict)": { + "us": 13.4, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 3.3, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 3.3, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 3.3, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 3.3, + "level": "full" + }, + "variants": { + "SAX": { + "us": 3.3, + "level": "full" + }, + "SAX (reused)": { + "us": 3.3, + "level": "full" + }, + "parser (reused)": { + "us": 6.7, + "level": "full" + }, + "parse": { + "us": 7.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 7.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 4.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 9.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.9, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 3.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 4.0, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 4.4, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 7.0, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 7.5, + "level": "full" + }, + "insitu (copy)": { + "us": 7.6, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 8.7, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 9.0, + "level": "full" + }, + "SAX (string stream)": { + "us": 11.3, + "level": "full" + }, + "SAX": { + "us": 12.4, + "level": "full" + }, + "Document": { + "us": 13.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 4.6, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 4.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 4.6, + "level": "full" + }, + "Value": { + "us": 13.2, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 2.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 2.5, + "level": "full" + }, + "Value": { + "us": 3.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 3.5, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 5.8, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 5.8, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 3.5, + "level": "full" + }, + "borrowed (reused)": { + "us": 5.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 6.1, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 337.4, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 337.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 331.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 331.3, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 331.3, + "level": "full" + }, + "parse": { + "us": 337.4, + "level": "full" + }, + "parse_copy": { + "us": 369.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 692.8, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 692.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 692.8, + "level": "full" + }, + "parse": { + "us": 3302.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 383.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 383.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 383.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 383.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 358.2, + "level": "full" + }, + "read (reused allocator)": { + "us": 383.7, + "level": "full" + }, + "read": { + "us": 383.9, + "level": "full" + }, + "insitu (copy)": { + "us": 384.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 336.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 336.2, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 335.0, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 335.0, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 335.0, + "level": "full" + }, + "On-Demand": { + "us": 336.2, + "level": "full" + }, + "DOM": { + "us": 405.6, + "level": "full" + }, + "DOM (reused)": { + "us": 405.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 341.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 341.9, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 2143.7, + "level": "full" + }, + "best_any": { + "variant": "lazy_json", + "us": 1722.6, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "lazy_json": { + "us": 1722.6, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2143.7, + "level": "full" + }, + "generic (double)": { + "us": 2148.0, + "level": "partial" + }, + "generic (strict)": { + "us": 2854.8, + "level": "full" + }, + "generic": { + "us": 2857.6, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 616.8, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 616.8, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 616.1, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 616.1, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 616.1, + "level": "full" + }, + "SAX": { + "us": 616.8, + "level": "full" + }, + "parser (reused)": { + "us": 1354.4, + "level": "full" + }, + "parse": { + "us": 1366.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1316.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 902.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1566.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1466.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 865.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 902.5, + "level": "no UTF-8" + }, + "SAX (string stream) (no encoding check)": { + "us": 1009.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1286.1, + "level": "full" + }, + "SAX (no encoding check)": { + "us": 1292.3, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1316.4, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1466.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1498.4, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1566.2, + "level": "full" + }, + "SAX (string stream)": { + "us": 1924.9, + "level": "full" + }, + "SAX": { + "us": 2147.3, + "level": "full" + }, + "Document": { + "us": 2336.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1119.0, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1119.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1119.0, + "level": "full" + }, + "Value": { + "us": 3713.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 443.3, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 443.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 443.3, + "level": "full" + }, + "Value": { + "us": 684.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 635.0, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 635.0, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 1433.7, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 1433.7, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 635.0, + "level": "full" + }, + "borrowed (reused)": { + "us": 1433.7, + "level": "full" + }, + "borrowed (copy)": { + "us": 1434.6, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 718.2, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 718.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 712.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 712.6, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 712.6, + "level": "full" + }, + "parse": { + "us": 718.2, + "level": "full" + }, + "parse_copy": { + "us": 745.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "sax", + "us": 1244.1, + "level": "full" + }, + "best_any": { + "variant": "sax", + "us": 1244.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "sax": { + "us": 1244.1, + "level": "full" + }, + "parse": { + "us": 4976.4, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 672.6, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 672.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 673.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 673.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 642.3, + "level": "full" + }, + "read": { + "us": 672.6, + "level": "full" + }, + "insitu (copy)": { + "us": 673.3, + "level": "full" + }, + "read (reused allocator)": { + "us": 673.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "On-Demand", + "us": 651.3, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 651.3, + "level": "full" + }, + "best_reused": { + "variant": "On-Demand (reused)", + "us": 649.7, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 649.7, + "level": "full" + }, + "variants": { + "On-Demand (reused)": { + "us": 649.7, + "level": "full" + }, + "On-Demand": { + "us": 651.3, + "level": "full" + }, + "DOM (reused)": { + "us": 1050.9, + "level": "full" + }, + "DOM": { + "us": 1051.6, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 876.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 876.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (double, strict)", + "us": 3296.5, + "level": "full" + }, + "best_any": { + "variant": "generic (double, strict)", + "us": 3296.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (double, strict)": { + "us": 3296.5, + "level": "full" + }, + "generic (double)": { + "us": 3325.1, + "level": "partial" + }, + "lazy_json": { + "us": 3484.3, + "level": "partial" + }, + "generic (strict)": { + "us": 5084.3, + "level": "full" + }, + "generic": { + "us": 5087.1, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (nodes 13914 str 369145 num 9.9386218228619264e+19); wrong result (nodes 1735441 str 42965417 num 0); wrong result (nodes 37778 str 221381 num 341051379245698); wrong result (nodes 80 str 1988 num 5.0587492701461376e+17)" + } + }, + "Boost.JSON": { + "best": { + "variant": "SAX", + "us": 697.7, + "level": "full" + }, + "best_any": { + "variant": "SAX", + "us": 697.7, + "level": "full" + }, + "best_reused": { + "variant": "SAX (reused)", + "us": 696.8, + "level": "full" + }, + "best_reused_any": { + "variant": "SAX (reused)", + "us": 696.8, + "level": "full" + }, + "variants": { + "SAX (reused)": { + "us": 696.8, + "level": "full" + }, + "SAX": { + "us": 697.7, + "level": "full" + }, + "parser (reused)": { + "us": 1687.4, + "level": "full" + }, + "parse": { + "us": 1697.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1799.0, + "level": "full" + }, + "best_any": { + "variant": "SAX (string stream) (no encoding check)", + "us": 1451.9, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1943.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1943.5, + "level": "full" + }, + "variants": { + "SAX (string stream) (no encoding check)": { + "us": 1451.9, + "level": "no UTF-8" + }, + "SAX (no encoding check)": { + "us": 1480.3, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 1574.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1604.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1777.5, + "level": "full" + }, + "insitu (copy)": { + "us": 1799.0, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1943.5, + "level": "full" + }, + "Document (no encoding check)": { + "us": 1943.9, + "level": "no UTF-8" + }, + "SAX (string stream)": { + "us": 1955.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1956.5, + "level": "no UTF-8" + }, + "SAX": { + "us": 2070.0, + "level": "full" + }, + "Document": { + "us": 2514.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "visitor", + "us": 1259.6, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 1259.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 1259.6, + "level": "full" + }, + "Value": { + "us": 5376.8, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "visitor", + "us": 840.4, + "level": "full" + }, + "best_any": { + "variant": "visitor", + "us": 840.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "visitor": { + "us": 840.4, + "level": "full" + }, + "Value": { + "us": 1438.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "visitor (copy)", + "us": 1231.2, + "level": "full" + }, + "best_any": { + "variant": "visitor (copy)", + "us": 1231.2, + "level": "full" + }, + "best_reused": { + "variant": "borrowed (reused)", + "us": 3329.6, + "level": "full" + }, + "best_reused_any": { + "variant": "borrowed (reused)", + "us": 3329.6, + "level": "full" + }, + "variants": { + "visitor (copy)": { + "us": 1231.2, + "level": "full" + }, + "borrowed (reused)": { + "us": 3329.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 3447.9, + "level": "full" + } + } + } + } + }, + "select": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 332.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 332.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 325.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 325.2, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 325.2, + "level": "full" + }, + "parse": { + "us": 332.3, + "level": "full" + }, + "structs (from_json)": { + "us": 334.2, + "level": "full" + }, + "parse_copy": { + "us": 370.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 3325.0, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 3325.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 3325.0, + "level": "full" + }, + "parse": { + "us": 3353.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 397.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 397.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 403.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 403.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 361.4, + "level": "full" + }, + "read": { + "us": 397.9, + "level": "full" + }, + "insitu (copy)": { + "us": 401.7, + "level": "full" + }, + "read (raw numbers)": { + "us": 402.4, + "level": "full" + }, + "read (reused allocator)": { + "us": 403.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 323.5, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 183.6, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 320.2, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 183.7, + "level": "partial" + }, + "variants": { + "On-Demand (key selectors)": { + "us": 183.6, + "level": "partial" + }, + "On-Demand (reused)": { + "us": 183.7, + "level": "partial" + }, + "On-Demand": { + "us": 187.7, + "level": "partial" + }, + "On-Demand structs": { + "us": 193.6, + "level": "partial" + }, + "DOM (reused)": { + "us": 320.2, + "level": "full" + }, + "DOM": { + "us": 323.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 413.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 413.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 529.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 342.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 342.0, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 529.4, + "level": "full" + }, + "lazy_json": { + "us": 981.9, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2411.8, + "level": "full" + }, + "generic (double)": { + "us": 2429.0, + "level": "partial" + }, + "generic (strict)": { + "us": 3106.7, + "level": "full" + }, + "generic": { + "us": 3112.1, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 883.6, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 883.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1462.3, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1462.3, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 883.6, + "level": "full" + }, + "parser (reused)": { + "us": 1462.3, + "level": "full" + }, + "parse": { + "us": 1476.7, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1600.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1121.3, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1576.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1486.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1078.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1121.3, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1400.4, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1486.4, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1498.9, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1536.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1560.4, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1576.1, + "level": "full" + }, + "insitu (copy)": { + "us": 1600.7, + "level": "full" + }, + "Document (string stream)": { + "us": 2357.1, + "level": "full" + }, + "Document": { + "us": 2358.8, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2394.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 700.6, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 700.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 700.6, + "level": "full" + }, + "structs": { + "us": 739.3, + "level": "no UTF-8" + }, + "Value": { + "us": 3473.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 504.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 504.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 504.2, + "level": "full" + }, + "Value": { + "us": 585.5, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 678.8, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 678.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 678.8, + "level": "full" + }, + "borrowed (copy)": { + "us": 1284.4, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 765.3, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 765.3, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 760.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 760.3, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 760.3, + "level": "full" + }, + "parse": { + "us": 765.3, + "level": "full" + }, + "structs (from_json)": { + "us": 796.0, + "level": "full" + }, + "parse_copy": { + "us": 886.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 5125.6, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 5125.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 5125.6, + "level": "full" + }, + "parse": { + "us": 5171.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy)", + "us": 999.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy)", + "us": 999.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1012.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1012.9, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 880.4, + "level": "full" + }, + "insitu (copy)": { + "us": 999.2, + "level": "full" + }, + "read": { + "us": 999.4, + "level": "full" + }, + "read (raw numbers)": { + "us": 1008.9, + "level": "full" + }, + "read (reused allocator)": { + "us": 1012.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 756.1, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 509.4, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 751.9, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 509.0, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 509.0, + "level": "partial" + }, + "On-Demand": { + "us": 509.4, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 510.5, + "level": "partial" + }, + "On-Demand structs": { + "us": 548.8, + "level": "partial" + }, + "DOM (reused)": { + "us": 751.9, + "level": "full" + }, + "DOM": { + "us": 756.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1042.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1042.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 1434.9, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 409.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 409.5, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 1434.9, + "level": "full" + }, + "generic (double, strict)": { + "us": 3911.3, + "level": "full" + }, + "generic (double)": { + "us": 4056.8, + "level": "partial" + }, + "generic": { + "us": 5729.0, + "level": "partial" + }, + "generic (strict)": { + "us": 5799.8, + "level": "full" + }, + "lazy_json": { + "us": 9001.1, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1379.9, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1379.9, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1908.9, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1908.9, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1379.9, + "level": "full" + }, + "parse": { + "us": 1907.9, + "level": "full" + }, + "parser (reused)": { + "us": 1908.9, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2245.1, + "level": "full" + }, + "best_any": { + "variant": "Document (no encoding check)", + "us": 1939.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1985.5, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1985.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1817.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1939.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1968.9, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1985.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 2018.4, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2079.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2127.0, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 2233.3, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 2245.1, + "level": "full" + }, + "Document": { + "us": 2568.2, + "level": "full" + }, + "Document (string stream)": { + "us": 2616.9, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2848.5, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 1532.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1526.5, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1526.5, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 1532.5, + "level": "full" + }, + "Value": { + "us": 5821.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 1033.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1033.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1033.2, + "level": "full" + }, + "Value": { + "us": 1226.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 1731.1, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 1731.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 1731.1, + "level": "full" + }, + "borrowed (copy)": { + "us": 3476.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1390.5, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1390.5, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1465.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1465.9, + "level": "full" + }, + "variants": { + "parse": { + "us": 1390.5, + "level": "full" + }, + "structs (from_json)": { + "us": 1416.3, + "level": "full" + }, + "read (reused)": { + "us": 1465.9, + "level": "full" + }, + "parse_copy": { + "us": 1603.4, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 11908.0, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 11908.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 11908.0, + "level": "full" + }, + "parse": { + "us": 12035.9, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers)", + "us": 2236.0, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers)", + "us": 2236.0, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 5554.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 5554.3, + "level": "full" + }, + "variants": { + "read (raw numbers)": { + "us": 2236.0, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 5480.1, + "level": "full" + }, + "read": { + "us": 5525.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 5554.3, + "level": "full" + }, + "insitu (copy)": { + "us": 5597.7, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 3409.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 700.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 3229.9, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 698.1, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 698.1, + "level": "partial" + }, + "On-Demand": { + "us": 700.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 747.1, + "level": "partial" + }, + "On-Demand structs": { + "us": 921.4, + "level": "partial" + }, + "DOM (reused)": { + "us": 3229.9, + "level": "full" + }, + "DOM": { + "us": 3409.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3694.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3694.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 1913.3, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 431.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 431.3, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 1913.3, + "level": "full" + }, + "lazy_json": { + "us": 3043.2, + "level": "partial" + }, + "generic (double)": { + "us": 10291.5, + "level": "partial" + }, + "generic (double, strict)": { + "us": 10403.4, + "level": "full" + }, + "generic": { + "us": 19729.3, + "level": "partial" + }, + "generic (strict)": { + "us": 20097.5, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 7216.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 7216.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 7211.5, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 7211.5, + "level": "full" + }, + "variants": { + "parser (reused)": { + "us": 7211.5, + "level": "full" + }, + "parse": { + "us": 7216.6, + "level": "full" + }, + "parse_into structs": { + "us": 7453.0, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 11762.3, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 11435.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 11421.3, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 11421.3, + "level": "full" + }, + "variants": { + "Document (reused allocator)": { + "us": 11421.3, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 11435.5, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 11462.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 11520.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 11547.2, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 11592.0, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 11762.3, + "level": "full" + }, + "Document": { + "us": 11791.5, + "level": "full" + }, + "Document (no encoding check)": { + "us": 11945.4, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 12137.6, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 13702.4, + "level": "no UTF-8" + }, + "Document (raw numbers)": { + "us": 13880.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 2529.2, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2402.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2402.0, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 2529.2, + "level": "full" + }, + "Value": { + "us": 13616.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 2328.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2328.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2328.5, + "level": "full" + }, + "Value": { + "us": 3907.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 5143.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 5143.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 5143.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 10672.8, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 88201.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 88201.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 54267.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 54267.2, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 54267.2, + "level": "full" + }, + "parse": { + "us": 88201.8, + "level": "full" + }, + "structs (from_json)": { + "us": 101996.9, + "level": "full" + }, + "parse_copy": { + "us": 127312.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 423361.7, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 423361.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 423361.7, + "level": "full" + }, + "parse": { + "us": 430906.6, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 137442.8, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 137442.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 70365.8, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 70365.8, + "level": "full" + }, + "variants": { + "read (reused allocator)": { + "us": 70365.8, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 98636.9, + "level": "full" + }, + "read": { + "us": 137442.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 138127.7, + "level": "full" + }, + "insitu (copy)": { + "us": 142337.4, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 123214.2, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 48614.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 57246.2, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 29249.2, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 29249.2, + "level": "partial" + }, + "On-Demand": { + "us": 48614.2, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 49110.1, + "level": "partial" + }, + "DOM (reused)": { + "us": 57246.2, + "level": "full" + }, + "On-Demand structs": { + "us": 72096.7, + "level": "partial" + }, + "DOM": { + "us": 123214.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 108296.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 108296.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 91253.1, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 66068.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 66068.8, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 91253.1, + "level": "full" + }, + "lazy_json": { + "us": 119018.0, + "level": "partial" + }, + "generic (double, strict)": { + "us": 247084.3, + "level": "full" + }, + "generic (double)": { + "us": 251551.1, + "level": "partial" + }, + "generic (strict)": { + "us": 342271.8, + "level": "full" + }, + "generic": { + "us": 346828.2, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 99077.5, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 99077.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 144837.3, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 144837.3, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 99077.5, + "level": "full" + }, + "parser (reused)": { + "us": 144837.3, + "level": "full" + }, + "parse": { + "us": 205149.1, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 222625.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 163654.2, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 197438.0, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 194537.4, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 122353.6, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 163654.2, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 166650.0, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 176066.1, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 194537.4, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 197438.0, + "level": "full" + }, + "Document (raw numbers) (no encoding check)": { + "us": 198332.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 200011.2, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 222625.3, + "level": "full" + }, + "Document (string stream)": { + "us": 279094.5, + "level": "full" + }, + "Document": { + "us": 306019.9, + "level": "full" + }, + "Document (raw numbers)": { + "us": 316505.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 107315.7, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 107315.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 107315.7, + "level": "full" + }, + "structs": { + "us": 134637.9, + "level": "no UTF-8" + }, + "Value": { + "us": 410661.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 90485.8, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 90485.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 90485.8, + "level": "full" + }, + "Value": { + "us": 130216.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 239164.4, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 239164.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 239164.4, + "level": "full" + }, + "borrowed (copy)": { + "us": 293642.8, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 1.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1.6, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 1.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 1.5, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 1.5, + "level": "full" + }, + "parse": { + "us": 1.6, + "level": "full" + }, + "structs (from_json)": { + "us": 1.6, + "level": "full" + }, + "parse_copy": { + "us": 1.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "structs (from_json)", + "us": 17.0, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 17.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (from_json)": { + "us": 17.0, + "level": "full" + }, + "parse": { + "us": 17.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 1.8, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 1.8, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 1.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 1.7, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 1.7, + "level": "full" + }, + "read (reused allocator)": { + "us": 1.7, + "level": "full" + }, + "read": { + "us": 1.8, + "level": "full" + }, + "insitu (copy)": { + "us": 1.8, + "level": "full" + }, + "read (raw numbers)": { + "us": 1.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 1.2, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 1.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 1.0, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 1.0, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 1.2, + "level": "partial" + }, + "On-Demand": { + "us": 1.3, + "level": "partial" + }, + "On-Demand structs": { + "us": 1.3, + "level": "partial" + }, + "DOM (reused)": { + "us": 1.6, + "level": "full" + }, + "DOM": { + "us": 2.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 1.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 1.5, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 2.0, + "level": "full" + }, + "lazy_json": { + "us": 2.3, + "level": "partial" + }, + "generic (double)": { + "us": 9.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 9.4, + "level": "full" + }, + "generic (strict)": { + "us": 13.5, + "level": "full" + }, + "generic": { + "us": 13.6, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 3.9, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 3.9, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 6.5, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 6.5, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 3.9, + "level": "full" + }, + "parser (reused)": { + "us": 6.5, + "level": "full" + }, + "parse": { + "us": 6.7, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 7.2, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 3.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 8.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 7.6, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 3.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 3.8, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 5.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 7.1, + "level": "full" + }, + "insitu (copy)": { + "us": 7.2, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 7.6, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 8.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 8.2, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 8.4, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 11.5, + "level": "full" + }, + "Document": { + "us": 12.9, + "level": "full" + }, + "Document (raw numbers)": { + "us": 13.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 3.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 3.0, + "level": "no UTF-8" + }, + "from_utf8 + structs": { + "us": 3.0, + "level": "full" + }, + "Value": { + "us": 13.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 2.0, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 2.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 2.0, + "level": "full" + }, + "Value": { + "us": 2.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 3.5, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 3.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 3.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 5.9, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "structs (from_json)", + "us": 282.2, + "level": "full" + }, + "best_any": { + "variant": "structs (from_json)", + "us": 282.2, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 274.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 274.7, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 274.7, + "level": "full" + }, + "structs (from_json)": { + "us": 282.2, + "level": "full" + }, + "parse": { + "us": 283.0, + "level": "full" + }, + "parse_copy": { + "us": 310.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 3197.9, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 3197.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 3197.9, + "level": "full" + }, + "structs (from_json)": { + "us": 3219.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 340.4, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 340.4, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 342.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 342.4, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 311.6, + "level": "full" + }, + "read": { + "us": 340.4, + "level": "full" + }, + "insitu (copy)": { + "us": 341.5, + "level": "full" + }, + "read (reused allocator)": { + "us": 342.4, + "level": "full" + }, + "read (raw numbers)": { + "us": 346.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 302.7, + "level": "full" + }, + "best_any": { + "variant": "On-Demand (key selectors)", + "us": 163.0, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 301.6, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 161.1, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 161.1, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 163.0, + "level": "partial" + }, + "On-Demand": { + "us": 165.0, + "level": "partial" + }, + "On-Demand structs": { + "us": 166.7, + "level": "partial" + }, + "DOM (reused)": { + "us": 301.6, + "level": "full" + }, + "DOM": { + "us": 302.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 296.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 296.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 419.5, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 295.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 295.1, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 419.5, + "level": "full" + }, + "lazy_json": { + "us": 444.4, + "level": "partial" + }, + "generic (double, strict)": { + "us": 2205.2, + "level": "full" + }, + "generic (double)": { + "us": 2222.0, + "level": "partial" + }, + "generic (strict)": { + "us": 2927.1, + "level": "full" + }, + "generic": { + "us": 2964.5, + "level": "partial" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 767.6, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 767.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1316.5, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1316.5, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 767.6, + "level": "full" + }, + "parser (reused)": { + "us": 1316.5, + "level": "full" + }, + "parse": { + "us": 1325.8, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1270.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 845.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1507.4, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator) (no encoding check)", + "us": 1412.9, + "level": "no UTF-8" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 818.1, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 845.1, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1171.1, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1237.8, + "level": "full" + }, + "insitu (copy)": { + "us": 1270.5, + "level": "full" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1412.9, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1446.7, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 1501.0, + "level": "no UTF-8" + }, + "Document (reused allocator)": { + "us": 1507.4, + "level": "full" + }, + "Document (string stream)": { + "us": 2027.8, + "level": "full" + }, + "Document": { + "us": 2281.8, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2357.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 540.9, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 540.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 540.9, + "level": "full" + }, + "structs": { + "us": 579.6, + "level": "no UTF-8" + }, + "Value": { + "us": 3279.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 371.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 371.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 371.4, + "level": "full" + }, + "Value": { + "us": 445.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 649.2, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 649.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 649.2, + "level": "full" + }, + "borrowed (copy)": { + "us": 1242.3, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse", + "us": 547.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 547.7, + "level": "full" + }, + "best_reused": { + "variant": "read (reused)", + "us": 546.2, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused)", + "us": 546.2, + "level": "full" + }, + "variants": { + "read (reused)": { + "us": 546.2, + "level": "full" + }, + "parse": { + "us": 547.7, + "level": "full" + }, + "parse_copy": { + "us": 570.6, + "level": "full" + }, + "structs (from_json)": { + "us": 571.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse", + "us": 4968.0, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 4968.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 4968.0, + "level": "full" + }, + "structs (from_json)": { + "us": 5127.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read", + "us": 514.9, + "level": "full" + }, + "best_any": { + "variant": "read", + "us": 514.9, + "level": "full" + }, + "best_reused": { + "variant": "read (reused allocator)", + "us": 515.1, + "level": "full" + }, + "best_reused_any": { + "variant": "read (reused allocator)", + "us": 515.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed)": { + "us": 482.3, + "level": "full" + }, + "read": { + "us": 514.9, + "level": "full" + }, + "read (reused allocator)": { + "us": 515.1, + "level": "full" + }, + "read (raw numbers)": { + "us": 532.4, + "level": "full" + }, + "insitu (copy)": { + "us": 541.5, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM", + "us": 591.1, + "level": "full" + }, + "best_any": { + "variant": "On-Demand", + "us": 330.6, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused)", + "us": 593.5, + "level": "full" + }, + "best_reused_any": { + "variant": "On-Demand (reused)", + "us": 329.2, + "level": "partial" + }, + "variants": { + "On-Demand (reused)": { + "us": 329.2, + "level": "partial" + }, + "On-Demand": { + "us": 330.6, + "level": "partial" + }, + "On-Demand (key selectors)": { + "us": 331.2, + "level": "partial" + }, + "On-Demand structs": { + "us": 381.5, + "level": "partial" + }, + "DOM": { + "us": 591.1, + "level": "full" + }, + "DOM (reused)": { + "us": 593.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 704.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 704.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "structs (validate_skipped)", + "us": 712.3, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 208.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 208.3, + "level": "partial" + }, + "structs (validate_skipped)": { + "us": 712.3, + "level": "full" + }, + "lazy_json": { + "us": 1545.7, + "level": "partial" + }, + "generic (double, strict)": { + "us": 3344.9, + "level": "full" + }, + "generic (double)": { + "us": 3474.6, + "level": "partial" + }, + "generic": { + "us": 5185.9, + "level": "partial" + }, + "generic (strict)": { + "us": 5524.8, + "level": "full" + } + }, + "excluded": { + "lazy_json (string_view)": "wrong result (3284923)" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse_into structs", + "us": 1140.5, + "level": "full" + }, + "best_any": { + "variant": "parse_into structs", + "us": 1140.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused)", + "us": 1617.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused)", + "us": 1617.2, + "level": "full" + }, + "variants": { + "parse_into structs": { + "us": 1140.5, + "level": "full" + }, + "parse": { + "us": 1609.5, + "level": "full" + }, + "parser (reused)": { + "us": 1617.2, + "level": "full" + } + }, + "excluded": { + "parse (numbers: none)": "wrong result (1091); wrong result (1154); wrong result (8)" + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1662.8, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1569.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document (reused allocator)", + "us": 1812.1, + "level": "full" + }, + "best_reused_any": { + "variant": "Document (reused allocator)", + "us": 1812.1, + "level": "full" + }, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1412.0, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1569.5, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 1662.8, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 1665.6, + "level": "full" + }, + "Document (reused allocator)": { + "us": 1812.1, + "level": "full" + }, + "Document (string stream) (no encoding check)": { + "us": 1853.1, + "level": "no UTF-8" + }, + "Document (reused allocator) (no encoding check)": { + "us": 1854.2, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 1914.7, + "level": "no UTF-8" + }, + "Document (raw numbers) (no encoding check)": { + "us": 2121.9, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 2257.7, + "level": "full" + }, + "Document": { + "us": 2502.0, + "level": "full" + }, + "Document (raw numbers)": { + "us": 2912.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "from_utf8 + structs", + "us": 694.6, + "level": "full" + }, + "best_any": { + "variant": "from_utf8 + structs", + "us": 694.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "from_utf8 + structs": { + "us": 694.6, + "level": "full" + }, + "structs": { + "us": 726.2, + "level": "no UTF-8" + }, + "Value": { + "us": 4784.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "structs", + "us": 653.4, + "level": "full" + }, + "best_any": { + "variant": "structs", + "us": 653.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs": { + "us": 653.4, + "level": "full" + }, + "Value": { + "us": 836.8, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "structs (copy)", + "us": 1327.6, + "level": "full" + }, + "best_any": { + "variant": "structs (copy)", + "us": 1327.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "structs (copy)": { + "us": 1327.6, + "level": "full" + }, + "borrowed (copy)": { + "us": 3067.6, + "level": "full" + } + } + } + } + }, + "edit": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 531.8, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 531.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 531.8, + "level": "full" + }, + "editable (source numbers)": { + "us": 569.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2911.8, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2911.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2911.8, + "level": "full" + }, + "parse": { + "us": 3912.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 803.9, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 803.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 761.1, + "level": "full" + }, + "mut copy": { + "us": 803.9, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 804.0, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 636.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 636.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3524.7, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 3487.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 3487.4, + "level": "partial" + }, + "generic (strict)": { + "us": 3524.7, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1962.7, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1962.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1962.7, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2341.6, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1864.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1837.8, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1864.1, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2046.0, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2114.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2333.0, + "level": "full" + }, + "insitu (copy)": { + "us": 2341.6, + "level": "full" + }, + "Document": { + "us": 2970.0, + "level": "full" + }, + "Document (string stream)": { + "us": 3017.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4041.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4041.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4041.7, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1196.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1196.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1196.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1862.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1862.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1862.2, + "level": "full" + }, + "owned (copy)": { + "us": 2560.0, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 1116.2, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 1116.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 1116.2, + "level": "full" + }, + "editable (source numbers)": { + "us": 1140.7, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 4999.1, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 4999.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 4999.1, + "level": "full" + }, + "parse": { + "us": 5737.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 1697.2, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 1697.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 1590.3, + "level": "full" + }, + "mut copy": { + "us": 1697.2, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 1708.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1559.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1559.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 6551.1, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 6451.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 6451.0, + "level": "partial" + }, + "generic (strict)": { + "us": 6551.1, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 2936.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2936.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2936.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 3242.4, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2924.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 2836.4, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2924.6, + "level": "no UTF-8" + }, + "Document (no encoding check)": { + "us": 2925.1, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 3066.4, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 3133.4, + "level": "full" + }, + "insitu (copy)": { + "us": 3242.4, + "level": "full" + }, + "Document": { + "us": 3522.6, + "level": "full" + }, + "Document (string stream)": { + "us": 3593.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 6586.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6586.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6586.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2388.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2388.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2388.6, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 4193.6, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 4193.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 4193.6, + "level": "full" + }, + "owned (copy)": { + "us": 4989.9, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "editable (source numbers)", + "us": 2702.4, + "level": "full" + }, + "best_any": { + "variant": "editable (source numbers)", + "us": 2702.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable (source numbers)": { + "us": 2702.4, + "level": "full" + }, + "editable": { + "us": 5713.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 15603.3, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 15603.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 15603.3, + "level": "full" + }, + "parse": { + "us": 16014.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 10020.0, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 10020.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 9860.1, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 10020.0, + "level": "full" + }, + "mut copy": { + "us": 10092.3, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 8936.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 8936.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 23644.2, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 23383.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 23383.4, + "level": "partial" + }, + "generic (strict)": { + "us": 23644.2, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 13413.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 13413.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 13413.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 20517.7, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 20320.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document (string stream) (no encoding check)": { + "us": 20320.1, + "level": "no UTF-8" + }, + "insitu (copy untimed) (no encoding check)": { + "us": 20404.6, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 20517.7, + "level": "full" + }, + "insitu (copy untimed)": { + "us": 20565.1, + "level": "full" + }, + "insitu (copy) (no encoding check)": { + "us": 20868.2, + "level": "no UTF-8" + }, + "Document": { + "us": 21148.6, + "level": "full" + }, + "Document (string stream)": { + "us": 21167.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 21213.5, + "level": "no UTF-8" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 16630.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 16630.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 16630.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 7743.7, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 7743.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 7743.7, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "owned (copy)", + "us": 14895.5, + "level": "full" + }, + "best_any": { + "variant": "owned (copy)", + "us": 14895.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "owned (copy)": { + "us": 14895.5, + "level": "full" + }, + "borrowed (copy)": { + "us": 14942.9, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 192363.1, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 192363.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 192363.1, + "level": "full" + }, + "editable (source numbers)": { + "us": 192901.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 604744.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 604744.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 604744.5, + "level": "full" + }, + "parse": { + "us": 797374.8, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 318307.9, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 318307.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 271226.6, + "level": "full" + }, + "mut copy": { + "us": 318307.9, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 318834.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 186232.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 186232.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 661940.8, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 632543.1, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 632543.1, + "level": "partial" + }, + "generic (strict)": { + "us": 661940.8, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 356243.6, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 356243.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 356243.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 362000.7, + "level": "full" + }, + "best_any": { + "variant": "Document (string stream) (no encoding check)", + "us": 296360.9, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 271888.2, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 296360.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 302575.6, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 315892.3, + "level": "full" + }, + "Document (no encoding check)": { + "us": 332533.5, + "level": "no UTF-8" + }, + "insitu (copy)": { + "us": 362000.7, + "level": "full" + }, + "Document (string stream)": { + "us": 407503.6, + "level": "full" + }, + "Document": { + "us": 452671.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 632766.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 632766.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 632766.1, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 390951.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 390951.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 390951.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 391369.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 391369.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 391369.2, + "level": "full" + }, + "owned (copy)": { + "us": 574174.1, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 3.1, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 3.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 3.1, + "level": "full" + }, + "editable (source numbers)": { + "us": 3.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 13.5, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 13.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 13.5, + "level": "full" + }, + "parse": { + "us": 19.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 3.7, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 3.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "mut copy": { + "us": 3.7, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 3.7, + "level": "full" + }, + "insitu (copy untimed) + mut copy": { + "us": 3.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 3.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 3.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 15.6, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 15.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 15.3, + "level": "partial" + }, + "generic (strict)": { + "us": 15.6, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 9.1, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 9.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 9.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 11.1, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 7.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 7.7, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 7.8, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 9.2, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 11.0, + "level": "full" + }, + "insitu (copy)": { + "us": 11.1, + "level": "full" + }, + "Document (no encoding check)": { + "us": 12.1, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 15.4, + "level": "full" + }, + "Document": { + "us": 17.0, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 17.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 17.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 17.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 6.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 9.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 9.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 9.0, + "level": "full" + }, + "owned (copy)": { + "us": 13.1, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 480.1, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 480.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 480.1, + "level": "full" + }, + "editable (source numbers)": { + "us": 512.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 2702.2, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 2702.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 2702.2, + "level": "full" + }, + "parse": { + "us": 3686.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "insitu (copy) + mut copy", + "us": 726.3, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) + mut copy", + "us": 726.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 699.7, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 726.3, + "level": "full" + }, + "mut copy": { + "us": 731.1, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 509.1, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 509.1, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3289.0, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 3262.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 3262.0, + "level": "partial" + }, + "generic (strict)": { + "us": 3289.0, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 1787.8, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 1787.8, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 1787.8, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 1992.5, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 1576.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 1547.9, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 1576.0, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 1799.3, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 1950.2, + "level": "full" + }, + "insitu (copy)": { + "us": 1992.5, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2055.3, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 2652.6, + "level": "full" + }, + "Document": { + "us": 2904.4, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3816.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3816.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3816.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1061.1, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1061.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1061.1, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1793.6, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1793.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1793.6, + "level": "full" + }, + "owned (copy)": { + "us": 2514.9, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "editable", + "us": 879.7, + "level": "full" + }, + "best_any": { + "variant": "editable", + "us": 879.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "editable": { + "us": 879.7, + "level": "full" + }, + "editable (source numbers)": { + "us": 905.9, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "ordered_json", + "us": 4806.3, + "level": "full" + }, + "best_any": { + "variant": "ordered_json", + "us": 4806.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "ordered_json": { + "us": 4806.3, + "level": "full" + }, + "parse": { + "us": 5720.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "mut copy", + "us": 1218.5, + "level": "full" + }, + "best_any": { + "variant": "mut copy", + "us": 1218.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) + mut copy": { + "us": 1183.3, + "level": "full" + }, + "mut copy": { + "us": 1218.5, + "level": "full" + }, + "insitu (copy) + mut copy": { + "us": 1218.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document", + "us": 1212.8, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document": { + "us": 1212.8, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 5896.5, + "level": "full" + }, + "best_any": { + "variant": "generic", + "us": 5779.2, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 5779.2, + "level": "partial" + }, + "generic (strict)": { + "us": 5896.5, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse", + "us": 2632.9, + "level": "full" + }, + "best_any": { + "variant": "parse", + "us": 2632.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse": { + "us": 2632.9, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "insitu (copy)", + "us": 2703.7, + "level": "full" + }, + "best_any": { + "variant": "insitu (copy) (no encoding check)", + "us": 2514.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "insitu (copy untimed) (no encoding check)": { + "us": 2453.3, + "level": "no UTF-8" + }, + "insitu (copy) (no encoding check)": { + "us": 2514.7, + "level": "no UTF-8" + }, + "insitu (copy untimed)": { + "us": 2616.7, + "level": "full" + }, + "insitu (copy)": { + "us": 2703.7, + "level": "full" + }, + "Document (no encoding check)": { + "us": 2759.3, + "level": "no UTF-8" + }, + "Document (string stream) (no encoding check)": { + "us": 2848.0, + "level": "no UTF-8" + }, + "Document (string stream)": { + "us": 3273.4, + "level": "full" + }, + "Document": { + "us": 3433.3, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 5854.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5854.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5854.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1970.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1970.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1970.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 3891.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 3891.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 3891.2, + "level": "full" + }, + "owned (copy)": { + "us": 4690.0, + "level": "full" + } + } + } + } + }, + "minify": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 482.7, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 482.7, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 505.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 505.9, + "level": "full" + }, + "variants": { + "parse + dump": { + "us": 482.7, + "level": "full" + }, + "read + dump (reused)": { + "us": 505.9, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 522.4, + "level": "full" + }, + "parse_copy + dump": { + "us": 564.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 4143.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 4143.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 4143.3, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 660.6, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 660.6, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 644.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 644.0, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 591.7, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 644.0, + "level": "full" + }, + "read + write": { + "us": 660.6, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 683.8, + "level": "full" + }, + "insitu (copy) + write": { + "us": 687.8, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 742.5, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 123.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 733.5, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 733.5, + "level": "full" + }, + "variants": { + "minify": { + "us": 123.3, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 733.5, + "level": "full" + }, + "DOM + to_string": { + "us": 742.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 695.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 695.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3779.5, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 422.3, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 422.3, + "level": "partial" + }, + "generic": { + "us": 3665.8, + "level": "partial" + }, + "generic (strict)": { + "us": 3779.5, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2085.6, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2085.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2129.4, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2129.4, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 2085.6, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 2129.4, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer", + "us": 3014.9, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (no encoding check)", + "us": 1978.1, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2396.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2382.6, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (no encoding check)": { + "us": 1978.1, + "level": "no UTF-8" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 2000.4, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2052.2, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2257.7, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2382.6, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2396.2, + "level": "full" + }, + "SAX to Writer": { + "us": 3014.9, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 3034.3, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 3095.6, + "level": "full" + }, + "Document + Writer": { + "us": 3262.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4012.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 4012.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4012.4, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1000.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1000.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1000.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1888.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1888.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1888.9, + "level": "full" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 1014.3, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 1014.3, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 1015.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 1015.4, + "level": "full" + }, + "variants": { + "parse + dump": { + "us": 1014.3, + "level": "full" + }, + "read + dump (reused)": { + "us": 1015.4, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 1021.2, + "level": "full" + }, + "parse_copy + dump": { + "us": 1126.3, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 5702.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 5702.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 5702.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 1261.8, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 1261.8, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 1351.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 1351.3, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 1205.1, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 1261.8, + "level": "full" + }, + "insitu (copy) + write": { + "us": 1310.3, + "level": "full" + }, + "read + write": { + "us": 1314.9, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 1351.3, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 1392.7, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 336.8, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 1377.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 1377.4, + "level": "full" + }, + "variants": { + "minify": { + "us": 336.8, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 1377.4, + "level": "full" + }, + "DOM + to_string": { + "us": 1392.7, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1540.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1540.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 6416.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1144.4, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1144.4, + "level": "partial" + }, + "generic": { + "us": 6261.5, + "level": "partial" + }, + "generic (strict)": { + "us": 6416.4, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2919.0, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2919.0, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2931.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2931.1, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 2919.0, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 2931.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer", + "us": 3012.3, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (no encoding check)", + "us": 2492.7, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2994.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2981.0, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (no encoding check)": { + "us": 2492.7, + "level": "no UTF-8" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 2550.9, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2795.1, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2933.5, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2981.0, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2994.2, + "level": "full" + }, + "SAX to Writer": { + "us": 3012.3, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 3197.5, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 3321.1, + "level": "full" + }, + "Document + Writer": { + "us": 3479.6, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 6582.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 6582.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 6582.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2096.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 2096.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2096.9, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 4196.0, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 4196.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 4196.0, + "level": "full" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 2620.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 2620.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 5327.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 5327.5, + "level": "full" + }, + "variants": { + "parse + dump (source numbers)": { + "us": 2620.4, + "level": "full" + }, + "read + dump (reused)": { + "us": 5327.5, + "level": "full" + }, + "parse_copy + dump": { + "us": 5459.1, + "level": "full" + }, + "parse + dump": { + "us": 5559.5, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 16463.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 16463.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 16463.2, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 3106.3, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 3106.3, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 9285.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 9285.9, + "level": "full" + }, + "variants": { + "read (raw numbers) + write": { + "us": 3106.3, + "level": "full" + }, + "read + write": { + "us": 9008.1, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 9225.8, + "level": "full" + }, + "insitu (copy) + write": { + "us": 9276.4, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 9285.9, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 8808.4, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 433.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 8886.2, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 8886.2, + "level": "full" + }, + "variants": { + "minify": { + "us": 433.3, + "level": "partial" + }, + "DOM + to_string": { + "us": 8808.4, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 8886.2, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 8837.7, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 8837.7, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 23764.9, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 2349.8, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 2349.8, + "level": "partial" + }, + "generic": { + "us": 23104.6, + "level": "partial" + }, + "generic (strict)": { + "us": 23764.9, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 13973.5, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 13973.5, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 13462.6, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 13462.6, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 13462.6, + "level": "full" + }, + "parse + serialize": { + "us": 13973.5, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (raw numbers)", + "us": 15523.3, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (raw numbers) (no encoding check)", + "us": 15512.0, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 20813.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 20813.2, + "level": "full" + }, + "variants": { + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 15512.0, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers)": { + "us": 15523.3, + "level": "full" + }, + "Document + Writer (reused allocator)": { + "us": 20813.2, + "level": "full" + }, + "SAX to Writer (string stream) (no encoding check)": { + "us": 21036.2, + "level": "no UTF-8" + }, + "Document + Writer": { + "us": 21177.2, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 21184.8, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 21318.4, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 21359.3, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 21367.2, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 21562.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 17306.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 17306.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 17306.0, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 7795.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 7795.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 7795.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 15716.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 15716.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 15716.2, + "level": "full" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 146320.2, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 146320.2, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 109060.0, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 109060.0, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 109060.0, + "level": "full" + }, + "parse + dump": { + "us": 146320.2, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 146609.8, + "level": "full" + }, + "parse_copy + dump": { + "us": 184753.0, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 528092.1, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 528092.1, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 528092.1, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 193396.6, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 193396.6, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 96788.4, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 96788.4, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 96788.4, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 158577.0, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 193396.6, + "level": "full" + }, + "read + write": { + "us": 195008.0, + "level": "full" + }, + "insitu (copy) + write": { + "us": 198721.1, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 266718.5, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 47040.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 207560.8, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 207560.8, + "level": "full" + }, + "variants": { + "minify": { + "us": 47040.3, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 207560.8, + "level": "full" + }, + "DOM + to_string": { + "us": 266718.5, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 168901.0, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 168901.0, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 458311.3, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 96405.0, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 96405.0, + "level": "partial" + }, + "generic": { + "us": 455056.6, + "level": "partial" + }, + "generic (strict)": { + "us": 458311.3, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 334468.1, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 334468.1, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 275271.4, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 275271.4, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 275271.4, + "level": "full" + }, + "parse + serialize": { + "us": 334468.1, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 355727.0, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 249234.8, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 323395.6, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 321331.9, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 249234.8, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 276686.1, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 278843.9, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 321331.9, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 323395.6, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 327139.4, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 355727.0, + "level": "full" + }, + "SAX to Writer": { + "us": 394249.3, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 398133.8, + "level": "full" + }, + "Document + Writer": { + "us": 428999.8, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 509701.9, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 509701.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 509701.9, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 215280.2, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 215280.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 215280.2, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 414376.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 414376.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 414376.9, + "level": "full" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 2.4, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 2.4, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 2.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 2.3, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 2.3, + "level": "full" + }, + "parse + dump": { + "us": 2.4, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 2.5, + "level": "full" + }, + "parse_copy + dump": { + "us": 2.6, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 19.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 19.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 19.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read + write", + "us": 3.0, + "level": "full" + }, + "best_any": { + "variant": "read + write", + "us": 3.0, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 2.7, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 2.7, + "level": "full" + }, + "variants": { + "read + write (reused allocator)": { + "us": 2.7, + "level": "full" + }, + "insitu (copy untimed) + write": { + "us": 2.9, + "level": "full" + }, + "read + write": { + "us": 3.0, + "level": "full" + }, + "insitu (copy) + write": { + "us": 3.0, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 3.0, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 3.8, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 0.6, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 3.4, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 3.4, + "level": "full" + }, + "variants": { + "minify": { + "us": 0.6, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 3.4, + "level": "full" + }, + "DOM + to_string": { + "us": 3.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 3.3, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 3.3, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 14.7, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 1.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 1.9, + "level": "partial" + }, + "generic": { + "us": 14.3, + "level": "partial" + }, + "generic (strict)": { + "us": 14.7, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 9.2, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 9.2, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 9.1, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 9.1, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 9.1, + "level": "full" + }, + "parse + serialize": { + "us": 9.2, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 13.9, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 7.5, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 12.2, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 11.6, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 7.5, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 10.3, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 10.3, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 11.6, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 12.2, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 12.2, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 13.9, + "level": "full" + }, + "SAX to Writer": { + "us": 15.5, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 15.6, + "level": "full" + }, + "Document + Writer": { + "us": 17.2, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 16.5, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 16.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 16.5, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 5.4, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5.4, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5.4, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 9.2, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 9.2, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 9.2, + "level": "full" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump (source numbers)", + "us": 418.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump (source numbers)", + "us": 418.5, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 416.9, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 416.9, + "level": "full" + }, + "variants": { + "read + dump (reused)": { + "us": 416.9, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 418.5, + "level": "full" + }, + "parse + dump": { + "us": 425.5, + "level": "full" + }, + "parse_copy + dump": { + "us": 455.2, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 3625.5, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 3625.5, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 3625.5, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 564.0, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 564.0, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 555.5, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 555.5, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 541.8, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 555.5, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 564.0, + "level": "full" + }, + "read + write": { + "us": 573.5, + "level": "full" + }, + "insitu (copy) + write": { + "us": 576.2, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 669.8, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 90.3, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 669.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 669.6, + "level": "full" + }, + "variants": { + "minify": { + "us": 90.3, + "level": "partial" + }, + "DOM (reused) + to_string": { + "us": 669.6, + "level": "full" + }, + "DOM + to_string": { + "us": 669.8, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 527.6, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 527.6, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3180.4, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 354.9, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 354.9, + "level": "partial" + }, + "generic": { + "us": 3168.5, + "level": "partial" + }, + "generic (strict)": { + "us": 3180.4, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 1798.7, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 1798.7, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 1807.0, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 1807.0, + "level": "full" + }, + "variants": { + "parse + serialize": { + "us": 1798.7, + "level": "full" + }, + "parser (reused) + serialize": { + "us": 1807.0, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 2431.4, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 1572.4, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2188.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator) (no encoding check)", + "us": 2094.2, + "level": "no UTF-8" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 1572.4, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 1790.9, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 1820.9, + "level": "no UTF-8" + }, + "Document + Writer (no encoding check)": { + "us": 2087.8, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2094.2, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2188.7, + "level": "full" + }, + "SAX to Writer (string stream)": { + "us": 2431.4, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 2706.3, + "level": "full" + }, + "SAX to Writer": { + "us": 2711.8, + "level": "full" + }, + "Document + Writer": { + "us": 2932.9, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3887.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 3887.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3887.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 864.3, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 864.3, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 864.3, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 1839.7, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 1839.7, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 1839.7, + "level": "full" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "parse + dump", + "us": 779.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 779.0, + "level": "full" + }, + "best_reused": { + "variant": "read + dump (reused)", + "us": 786.3, + "level": "full" + }, + "best_reused_any": { + "variant": "read + dump (reused)", + "us": 786.3, + "level": "full" + }, + "variants": { + "parse + dump": { + "us": 779.0, + "level": "full" + }, + "read + dump (reused)": { + "us": 786.3, + "level": "full" + }, + "parse + dump (source numbers)": { + "us": 792.5, + "level": "full" + }, + "parse_copy + dump": { + "us": 812.1, + "level": "full" + } + } + }, + "nlohmann json": { + "best": { + "variant": "parse + dump", + "us": 5352.0, + "level": "full" + }, + "best_any": { + "variant": "parse + dump", + "us": 5352.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "parse + dump": { + "us": 5352.0, + "level": "full" + } + } + }, + "yyjson": { + "best": { + "variant": "read (raw numbers) + write", + "us": 797.0, + "level": "full" + }, + "best_any": { + "variant": "read (raw numbers) + write", + "us": 797.0, + "level": "full" + }, + "best_reused": { + "variant": "read + write (reused allocator)", + "us": 830.6, + "level": "full" + }, + "best_reused_any": { + "variant": "read + write (reused allocator)", + "us": 830.6, + "level": "full" + }, + "variants": { + "insitu (copy untimed) + write": { + "us": 794.5, + "level": "full" + }, + "read (raw numbers) + write": { + "us": 797.0, + "level": "full" + }, + "read + write": { + "us": 829.5, + "level": "full" + }, + "insitu (copy) + write": { + "us": 829.6, + "level": "full" + }, + "read + write (reused allocator)": { + "us": 830.6, + "level": "full" + } + } + }, + "simdjson": { + "best": { + "variant": "DOM + to_string", + "us": 1211.1, + "level": "full" + }, + "best_any": { + "variant": "minify", + "us": 92.4, + "level": "partial" + }, + "best_reused": { + "variant": "DOM (reused) + to_string", + "us": 1212.6, + "level": "full" + }, + "best_reused_any": { + "variant": "DOM (reused) + to_string", + "us": 1212.6, + "level": "full" + }, + "variants": { + "minify": { + "us": 92.4, + "level": "partial" + }, + "DOM + to_string": { + "us": 1211.1, + "level": "full" + }, + "DOM (reused) + to_string": { + "us": 1212.6, + "level": "full" + } + } + }, + "sonic-cpp": { + "best": null, + "best_any": { + "variant": "Document + Serialize", + "us": 1214.4, + "level": "no UTF-8" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Document + Serialize": { + "us": 1214.4, + "level": "no UTF-8" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 5550.6, + "level": "full" + }, + "best_any": { + "variant": "minify_json", + "us": 638.5, + "level": "partial" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "minify_json": { + "us": 638.5, + "level": "partial" + }, + "generic": { + "us": 5531.0, + "level": "partial" + }, + "generic (strict)": { + "us": 5550.6, + "level": "full" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "parse + serialize", + "us": 2569.6, + "level": "full" + }, + "best_any": { + "variant": "parse + serialize", + "us": 2569.6, + "level": "full" + }, + "best_reused": { + "variant": "parser (reused) + serialize", + "us": 2545.2, + "level": "full" + }, + "best_reused_any": { + "variant": "parser (reused) + serialize", + "us": 2545.2, + "level": "full" + }, + "variants": { + "parser (reused) + serialize": { + "us": 2545.2, + "level": "full" + }, + "parse + serialize": { + "us": 2569.6, + "level": "full" + } + } + }, + "RapidJSON": { + "best": { + "variant": "SAX to Writer (string stream)", + "us": 2640.3, + "level": "full" + }, + "best_any": { + "variant": "SAX to Writer (string stream) (no encoding check)", + "us": 2139.6, + "level": "no UTF-8" + }, + "best_reused": { + "variant": "Document + Writer (reused allocator)", + "us": 2804.7, + "level": "full" + }, + "best_reused_any": { + "variant": "Document + Writer (reused allocator)", + "us": 2804.7, + "level": "full" + }, + "variants": { + "SAX to Writer (string stream) (no encoding check)": { + "us": 2139.6, + "level": "no UTF-8" + }, + "SAX to Writer (no encoding check)": { + "us": 2291.3, + "level": "no UTF-8" + }, + "SAX to Writer (raw numbers) (no encoding check)": { + "us": 2566.0, + "level": "no UTF-8" + }, + "SAX to Writer (string stream)": { + "us": 2640.3, + "level": "full" + }, + "Document + Writer (no encoding check)": { + "us": 2801.3, + "level": "no UTF-8" + }, + "Document + Writer (reused allocator)": { + "us": 2804.7, + "level": "full" + }, + "Document + Writer (reused allocator) (no encoding check)": { + "us": 2840.1, + "level": "no UTF-8" + }, + "SAX to Writer": { + "us": 2930.6, + "level": "full" + }, + "SAX to Writer (raw numbers)": { + "us": 3114.9, + "level": "full" + }, + "Document + Writer": { + "us": 3338.1, + "level": "full" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 5737.6, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 5737.6, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 5737.6, + "level": "full" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 1729.0, + "level": "full" + }, + "best_any": { + "variant": "Value", + "us": 1729.0, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 1729.0, + "level": "full" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed (copy)", + "us": 3903.9, + "level": "full" + }, + "best_any": { + "variant": "borrowed (copy)", + "us": 3903.9, + "level": "full" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed (copy)": { + "us": 3903.9, + "level": "full" + } + } + } + } + }, + "write": { + "twitter": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 147.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 147.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 147.8, + "level": "n/a" + }, + "dump": { + "us": 149.9, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 470.6, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 470.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 470.6, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 204.2, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 204.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 204.2, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 358.6, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 358.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 358.6, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 717.1, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 717.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 717.1, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 255.6, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 255.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 255.6, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 360.0, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 360.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 360.0, + "level": "n/a" + }, + "generic (strict)": { + "us": 365.6, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 479.7, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 479.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 479.7, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 549.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 549.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 549.8, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 434.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 434.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 434.3, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 582.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 582.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 582.5, + "level": "n/a" + } + } + } + }, + "citm_catalog": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 260.4, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 260.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 260.4, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 267.1, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 644.1, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 644.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 644.1, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 327.0, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 327.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 327.0, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 636.8, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 636.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 636.8, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 1033.1, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 1033.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 1033.1, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 541.0, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 541.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 541.0, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 660.0, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 660.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 660.0, + "level": "n/a" + }, + "generic (strict)": { + "us": 699.0, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 1015.9, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 1015.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 1015.9, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 887.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 887.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 887.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 927.2, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 927.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 927.2, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 799.5, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 799.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 799.5, + "level": "n/a" + } + } + } + }, + "canada": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 998.5, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 998.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 998.5, + "level": "n/a" + }, + "dump": { + "us": 3861.0, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 4343.5, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 4343.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 4343.5, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 3748.2, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 3748.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 3748.2, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 4998.6, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 4998.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 4998.6, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 9017.1, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 9017.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 9017.1, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 5119.7, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 5119.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 5119.7, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic (strict)", + "us": 3714.1, + "level": "n/a" + }, + "best_any": { + "variant": "generic (strict)", + "us": 3714.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic (strict)": { + "us": 3714.1, + "level": "n/a" + }, + "generic": { + "us": 3736.5, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 6153.7, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 6153.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 6153.7, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 4005.1, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 4005.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 4005.1, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 3987.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 3987.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3987.3, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 5146.6, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 5146.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 5146.6, + "level": "n/a" + } + } + } + }, + "jeopardy": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 63958.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 63958.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 63958.0, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 64736.5, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 114096.0, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 114096.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 114096.0, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 65989.4, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 65989.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 65989.4, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 154364.5, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 154364.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 154364.5, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 134259.5, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 134259.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 134259.5, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 69546.0, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 69546.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 69546.0, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 124598.1, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 124598.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 124598.1, + "level": "n/a" + }, + "generic (strict)": { + "us": 132481.0, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 139022.5, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 139022.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 139022.5, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 134162.6, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 134162.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 134162.6, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 109175.6, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 109175.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 109175.6, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 122623.4, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 122623.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 122623.4, + "level": "n/a" + } + } + } + }, + "status": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 0.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 0.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 0.8, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 0.8, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 1.9, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 1.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 1.9, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 1.2, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 1.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 1.2, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 1.9, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 1.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 1.9, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 4.0, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 4.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 4.0, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 1.6, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 1.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 1.6, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 1.7, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 1.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 1.7, + "level": "n/a" + }, + "generic (strict)": { + "us": 2.0, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 2.5, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 2.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 2.5, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 3.3, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 3.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 3.3, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 2.8, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 2.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 2.8, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 2.8, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 2.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 2.8, + "level": "n/a" + } + } + } + }, + "twitter_min": { + "nlohmann json_document": { + "best": { + "variant": "dump (source numbers)", + "us": 142.8, + "level": "n/a" + }, + "best_any": { + "variant": "dump (source numbers)", + "us": 142.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump (source numbers)": { + "us": 142.8, + "level": "n/a" + }, + "dump": { + "us": 146.1, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 437.3, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 437.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 437.3, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 195.6, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 195.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 195.6, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 358.1, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 358.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 358.1, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 662.4, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 662.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 662.4, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 236.2, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 236.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 236.2, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 331.3, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 331.3, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 331.3, + "level": "n/a" + }, + "generic (strict)": { + "us": 366.6, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 478.9, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 478.9, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 478.9, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 550.4, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 550.4, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 550.4, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 434.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 434.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 434.7, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 580.2, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 580.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 580.2, + "level": "n/a" + } + } + } + }, + "citm_catalog_min": { + "nlohmann json_document": { + "best": { + "variant": "dump", + "us": 269.5, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 269.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 269.5, + "level": "n/a" + }, + "dump (source numbers)": { + "us": 277.0, + "level": "n/a" + } + } + }, + "nlohmann json": { + "best": { + "variant": "dump", + "us": 666.2, + "level": "n/a" + }, + "best_any": { + "variant": "dump", + "us": 666.2, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "dump": { + "us": 666.2, + "level": "n/a" + } + } + }, + "yyjson": { + "best": { + "variant": "write", + "us": 343.8, + "level": "n/a" + }, + "best_any": { + "variant": "write", + "us": 343.8, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "write": { + "us": 343.8, + "level": "n/a" + } + } + }, + "simdjson": { + "best": { + "variant": "to_string", + "us": 670.5, + "level": "n/a" + }, + "best_any": { + "variant": "to_string", + "us": 670.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "to_string": { + "us": 670.5, + "level": "n/a" + } + } + }, + "RapidJSON": { + "best": { + "variant": "Writer", + "us": 1096.6, + "level": "n/a" + }, + "best_any": { + "variant": "Writer", + "us": 1096.6, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Writer": { + "us": 1096.6, + "level": "n/a" + } + } + }, + "sonic-cpp": { + "best": { + "variant": "Serialize", + "us": 525.1, + "level": "n/a" + }, + "best_any": { + "variant": "Serialize", + "us": 525.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Serialize": { + "us": 525.1, + "level": "n/a" + } + } + }, + "Glaze": { + "best": { + "variant": "generic", + "us": 680.1, + "level": "n/a" + }, + "best_any": { + "variant": "generic", + "us": 680.1, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "generic": { + "us": 680.1, + "level": "n/a" + }, + "generic (strict)": { + "us": 693.2, + "level": "n/a" + } + }, + "excluded": { + "generic (double)": "the output does not read back as the expected document", + "generic (double, strict)": "the output does not read back as the expected document" + } + }, + "Boost.JSON": { + "best": { + "variant": "serialize", + "us": 1070.7, + "level": "n/a" + }, + "best_any": { + "variant": "serialize", + "us": 1070.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "serialize": { + "us": 1070.7, + "level": "n/a" + } + } + }, + "serde_json": { + "best": { + "variant": "Value", + "us": 828.7, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 828.7, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 828.7, + "level": "n/a" + } + } + }, + "sonic-rs": { + "best": { + "variant": "Value", + "us": 889.5, + "level": "n/a" + }, + "best_any": { + "variant": "Value", + "us": 889.5, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "Value": { + "us": 889.5, + "level": "n/a" + } + } + }, + "simd-json": { + "best": { + "variant": "borrowed", + "us": 765.0, + "level": "n/a" + }, + "best_any": { + "variant": "borrowed", + "us": 765.0, + "level": "n/a" + }, + "best_reused": null, + "best_reused_any": null, + "variants": { + "borrowed": { + "us": 765.0, + "level": "n/a" + } + } + } + } + } +} diff --git a/docs/mkdocs/scripts/figures/json_view_layout.py b/docs/mkdocs/scripts/figures/json_view_layout.py index 9d362ab9a..be36e875f 100644 --- a/docs/mkdocs/scripts/figures/json_view_layout.py +++ b/docs/mkdocs/scripts/figures/json_view_layout.py @@ -104,10 +104,8 @@ def ribbon(body, x0, y, cw, prefix, label=True): # ---------------------------------------------------------------- figure 1: parse() vs json_document -def layout(): - W, H, P = 840, 692, "jvl" - b = markers(P) - # --- panel A: basic_json::parse() +def layout_tree(b, P): + """panel A: basic_json::parse(), y from 0 to 220""" b.append(text(16, 26, "basic_json::parse(): a tree, every array, object, and string in its own heap allocation", "nj-jsonview-h")) b.append(rect(16, 98, 60, 34, "nj-jsonview-box")) b.append(text(46, 120, "json", "nj-jsonview-mono", anchor="middle")) @@ -117,7 +115,7 @@ def layout(): rows = [('"port"', "6379", None), ('"price"', "19.9", "double: 19.90 is gone"), ('"tags"', "\u2022", None)] for i, (k, v, note) in enumerate(rows): y = 50 + i * 48 - b.append(curve(192, 115, 226, y + 17, LINE, P, bend=0)) + b.append(line(192, 115, 226, y + 17, LINE, P)) b.append(rect(228, y, 180, 34, "nj-jsonview-heap")) b.append(text(240, y + 22, k, "nj-jsonview-mono", KEY)) b.append(text(396, y + 22, v, "nj-jsonview-mono", NUM if i < 2 else LINE, anchor="end")) @@ -132,8 +130,9 @@ def layout(): b.append('' % (yt - 17, yt + 17)) b.append(text(601, yt + 5, "json", "nj-jsonview-mono", anchor="middle")) b.append(text(647, yt + 5, "json", "nj-jsonview-mono", anchor="middle")) - b.append(curve(601, yt - 17, 706, 130, LINE, P, bend=-20)) - b.append(curve(647, yt + 17, 706, 196, LINE, P, bend=20)) + for x1, y1, y2 in ((601, yt - 17, 130), (647, yt + 17, 196)): + b.append('' + % (LINE, x1, y1, x1, y2, x1 + 40, y2, 706, y2, P, LINE)) b.append(rect(708, 113, 126, 34, "nj-jsonview-heap")) b.append(text(771, 135, "std::string eu", "nj-jsonview-mono nj-jsonview-sm", STR, anchor="middle")) b.append(rect(708, 179, 126, 34, "nj-jsonview-heap")) @@ -141,9 +140,10 @@ def layout(): # legend b.append(rect(16, 186, 18, 14, "nj-jsonview-heap", rx=3)) b.append(text(42, 198, "a separate heap allocation", "nj-jsonview-note")) - # --- panel B: json_document::parse() - y0 = 252 - b.append('' % (y0 - 18)) + + +def layout_index(b, P, y0): + """panel B: json_document::parse(), y from y0 - 16 to y0 + 440""" b.append(text(16, y0 + 10, "json_document::parse(): the source text stays where it is; one flat index of 16-byte nodes", "nj-jsonview-h")) b.append(text(16, y0 + 38, "source text, 54 bytes (borrowed, or owned by the document)", "nj-jsonview-note")) cw, rx0, ry = 14, 42, y0 + 48 @@ -185,6 +185,25 @@ def layout(): b.append(curve(vx + 105, vy, n6x, ny + nh, STRUCT, P)) b.append(text(30, ny + nh + 50, "integers are converted while parsing and kept in their node;", "nj-jsonview-note")) b.append(text(30, ny + nh + 68, "floats and strings point back into the text", "nj-jsonview-note")) + + +TREE_DESC = ("The text {\"port\": 6379, \"price\": 19.90, \"tags\": [\"eu\", \"a\\\"b\"]} parsed by basic_json::parse(): " + "the root json value points to a std::map whose three nodes are separate heap allocations; the price is stored " + "as the double 19.9; the tags array is a std::vector of two json values, each pointing to its own std::string.") +INDEX_DESC = ("The same text parsed by json_document::parse(): it keeps the 54 bytes of source text and builds a flat index of " + "nine 16-byte nodes in document order: object, key port, unsigned integer 6379 (the converted value is in the " + "node), key price, float, key tags, array, string eu, and an escaped string. Keys, the float, and the plain " + "string point back into the source text; the escaped string points into the document's buffer of decoded " + "strings. A json_view is two pointers: one to the document and one to a node, here the array.") + + +def layout(): + # both panels in one figure (features/json_view.md) + W, H, P = 840, 692, "jvl" + b = markers(P) + layout_tree(b, P) + b.append('') + layout_index(b, P, 252) write("json_view_layout.svg", W, H, "fig-jvl-title", "The same J\u200bSON text parsed by basic_json::parse() and by json_document::parse()", "The text {\"port\": 6379, \"price\": 19.90, \"tags\": [\"eu\", \"a\\\"b\"]}. Top: basic_json::parse() builds a tree: " @@ -195,6 +214,16 @@ def layout(): "key tags, array, string eu, and an escaped string. Keys, the float, and the plain string point back into the " "source text; the escaped string points into the document's buffer of decoded strings. A json_view is two " "pointers: one to the document and one to a node, here the array.", b) + # each panel on its own (home/blog/how_3_13_0_got_faster.md), with their own marker ids + b = markers("jvlt") + layout_tree(b, "jvlt") + write("json_view_layout_tree.svg", W, 222, "fig-jvlt-title", + "A J\u200bSON text parsed by basic_json::parse()", TREE_DESC, b) + b = markers("jvli") + [''] + layout_index(b, "jvli", 252) + b.append('') + write("json_view_layout_index.svg", W, H - 236, "fig-jvli-title", + "The same J\u200bSON text parsed by json_document::parse()", INDEX_DESC, b) # ---------------------------------------------------------------- figure 2: lifetimes diff --git a/docs/mkdocs/scripts/figures/perf_blog.py b/docs/mkdocs/scripts/figures/perf_blog.py new file mode 100644 index 000000000..b4d54f69f --- /dev/null +++ b/docs/mkdocs/scripts/figures/perf_blog.py @@ -0,0 +1,795 @@ +"""Draws the figures of home/blog/how_3_13_0_got_faster.md as inline SVGs into docs/images/. + +Generated files: + +- perf_blog_overview.svg: speedup of 3.13.0 over 3.12.0 per workload (Google Benchmark suite) +- perf_blog_distribution.svg: how many of the suite's benchmarks got how much faster (data/perf_suite.csv) +- perf_blog_timeline_.svg: speedup over 3.12.0 of eight workloads at every develop commit that changed + json.hpp or json_view.hpp since 3.12.0, one panel each +- perf_blog_swar.svg: the eight-byte string test on one word of input +- perf_blog_overlap.svg: writing a short string with two overlapping 16-byte loads and stores +- perf_blog_digits.svg: converting eight ASCII digits with three multiplications +- perf_blog_cliffs.svg: operations that were quadratic or worse, 3.12.0 against 3.13.0 (log scale) +- perf_blog_heldout.svg: validate on the 19 files we didn't tune on, json_document against the fastest library per + file (data/perf_heldout_validate.json) +- perf_blog_usecases_.svg: libraries x use cases, time relative to the fastest fully validating library + (data/perf_usecases_.json); perf_blog_tables.py prints the tables of the appendix from the same data + +The numbers are copied from the tables of the post (the timeline from data/perf_timeline.csv, which +`tests/benchmarks/history/history.py summarize` writes); the tables stay on the page as the accessible fallback. Update both together. +Like the figures of charts.py, the SVGs are not images: the page includes their text with +`--8<-- "images/.svg"`, so they follow the colors and fonts of the page (`nj-charts` rules in +docs/css/fig-charts.css, `nj-fig` rules in docs/css/brand.css). Run `python3 scripts/figures/perf_blog.py` from +docs/mkdocs after changing data or drawing, and commit the generated files. +""" +import csv +import html +import json +import math +import re +from pathlib import Path + +HERE = Path(__file__).resolve().parent +OUT = HERE.parents[1] / "docs" / "images" +MINUS = "−" +TIMES = "×" + +# words the abbreviation extension (includes/glossary.md) would wrap in inside the SVG text +GLOSSARY = re.findall(r"^\*\[([^\]]+)\]", (HERE.parents[1] / "includes" / "glossary.md").read_text(), re.M) +ABBR = re.compile(r"(?' % (cls, W, H, tid, tid), + '%s' % (tid, esc(title)), + '%s' % (tid, esc(desc))] + s += body + s.append('') + text = protect("\n".join(s)) + "\n" + assert "\n\n" not in text # a blank line would end the raw HTML block + (OUT / name).write_text(text) + + +def hbar(x0, x1, y, h, r=4): + """Horizontal bar from the baseline x0 to x1, rounded only at the data end.""" + if abs(x1 - x0) < 0.5: + return "M%g %g h0.5 v%g h-0.5 Z" % (x0, y, h) + r = min(r, h / 2, abs(x1 - x0)) + s = 1 if x1 > x0 else -1 + return ("M%g %g H%g Q%g %g %g %g V%g Q%g %g %g %g H%g Z" + % (x0, y, x1 - s * r, x1, y, x1, y + r, y + h - r, x1, y + h, x1 - s * r, y + h, x0)) + + +def fx(v): + """speedup factor for labels: 2 significant digits below 10, integers above""" + if v >= 100: + return "%d%s" % (round(v), TIMES) + if v >= 10: + return "%.0f%s" % (v, TIMES) + return "%.1f%s" % (v, TIMES) if v >= 1.995 else "%.2f%s" % (v, TIMES) + + +# ---------- SWAR: one word of a string ---------- +def swar(): + text = 'witter",' + W, H = 640, 312 + L, cw, top = 40, 70, 34 + b = [] + b.append('eight input bytes, loaded as one 64-bit word (byte 0 is the lowest)' % L) + for i, ch in enumerate(text): + x = L + i * cw + special = ch == '"' + b.append('' % (x, top, cw - 6)) + if special: + b.append('' % (x, top, cw - 6)) + b.append('%s' % (x + (cw - 6) / 2, top + 26, esc(ch))) + b.append('0x%02X' % (x + (cw - 6) / 2, top + 58, ord(ch))) + b.append('byte %d' % (x + (cw - 6) / 2, top + 74, i)) + # result row + y2 = top + 112 + b.append('swar_string_special(): the high bit of each byte that needs handling' % (L, y2 - 14)) + for i, ch in enumerate(text): + x = L + i * cw + special = ch == '"' + b.append('' % (x, y2, cw - 6)) + if special: + b.append('' % (x, y2, cw - 6)) + b.append('%s' + % (x + (cw - 6) / 2, y2 + 23, "0x80" if special else "0x00")) + # conclusion + y3 = y2 + 70 + b.append('count_trailing_zeros(0x0080000000000000) = 55' % (L, y3)) + b.append('55 / 8 = 6: copy bytes 0 to 5 in one go, then handle the quote' % (L, y3 + 26)) + b.append('No branch per byte: a few subtractions, ANDs and ORs per word,' % (L, y3 + 56)) + b.append('then one count of trailing zeros.' % (L, y3 + 74)) + write("perf_blog_swar.svg", W, H, "nj-charts--swar", "nj-blog-swar", + "Finding the end of a run of ordinary string characters eight bytes at a time", + "The eight bytes w, i, t, t, e, r, quote and comma are loaded as one word. The test sets the high bit only in " + "byte 6, the quote. Counting trailing zero bits gives 55, divided by eight gives 6: bytes 0 to 5 are copied " + "at once, then the quote ends the string.", b) + + +def span(b, x0, x1, y, cls, label): + """a bracket under the cells from x0 to x1, tinted, with a label to its right or inside""" + b.append('' % (cls, x0, y, x1 - x0)) + b.append('' % (cls, x0, y)) + b.append('' % (cls, x1 - 4, y)) + b.append('%s' % ((x0 + x1) / 2, y + 16, label)) + + +# ---------- short strings: two overlapping 16-byte loads ---------- +def overlap(): + text = "profile_link_color" # a key of twitter.json, 18 bytes + n = len(text) + W = 640 + L, cw, top = 40, 31, 34 + X = lambda i: L + i * cw + b = ['a string of n = %d bytes: too long for one 16-byte vector, too short for a loop' % (L, n)] + for i, ch in enumerate(text): + both = n - 16 <= i < 16 + b.append('' % (X(i), top, cw - 4)) + if both: + b.append('' % (X(i), top, cw - 4)) + b.append('%s' % (X(i) + (cw - 4) / 2, top + 24, esc_md(ch))) + for i in (0, n - 16, 15, n - 1): + b.append('%d' % (X(i) + (cw - 4) / 2, top + 52, i)) + y = top + 66 + span(b, X(0), X(15) + cw - 4, y, "nj-charts-c1", "a = load 16 bytes at p") + span(b, X(n - 16), X(n - 1) + cw - 4, y + 30, "nj-charts-c2", "b = load 16 bytes at p + n " + MINUS + " 16") + y += 82 + b.append('Both loads lie inside the string, and together they cover all of it; bytes %d to 15 are in both.' % (L, y, n - 16)) + b.append('Test a and b for a quote, a backslash, a control character or 0x7F: none, so write' % (L, y + 22)) + b.append('store a at d, store b at d + n %s 16' % (L, y + 52, MINUS)) + b.append('The second store writes bytes %d to 15 again, with the same values. For any n from 16 to 32:' % (L, y + 80, n - 16)) + b.append('two loads, one test, two stores, no loop and no branch on the length.' % (L, y + 98)) + write("perf_blog_overlap.svg", W, y + 112, "nj-charts--swar", "nj-blog-overlap", + "Writing an 18-byte string with two overlapping 16-byte loads and stores", + "The 18 bytes of profile_link_color. Load a covers bytes 0 to 15, load b covers bytes 2 to 17, so bytes 2 to 15 " + "are in both. Neither contains a byte that needs escaping, so a is stored at the destination and b 2 bytes " + "later; the second store writes bytes 2 to 15 again with the same values. This works for any length from 16 to " + "32 bytes without a loop.", b) + + +# ---------- eight digits at a time: three multiplications ---------- +def digits(): + W = 600 + L, cw, h = 40, 64, 34 + X = lambda i: L + i * cw + steps = [ + ("eight ASCII digits in one 64-bit word (byte 0 is the lowest)", 1, list("12345678"), True), + ("& 0x0F0F0F0F0F0F0F0F: one digit value per byte", 1, list("12345678"), False), + ("× (10 · 2⁸ + 1) >> 8, every second byte kept: two digits per 16 bits", 2, ["12", "34", "56", "78"], False), + ("× (100 · 2¹⁶ + 1) >> 16, every second lane kept: four digits per 32 bits", 4, ["1234", "5678"], False), + ("× (10000 · 2³² + 1) >> 32: the value", 8, ["12345678"], False), + ] + b = [] + y = 20 + for k, (head, width, cells, ascii_) in enumerate(steps): + b.append('%s' % (L, y, esc(head))) + for j, c in enumerate(cells): + x = X(j * width) + b.append('' % (x, y + 10, width * cw - 6, h)) + if k == len(steps) - 1: + b.append('' % (x, y + 10, width * cw - 6, h)) + b.append('%s' % (x + (width * cw - 6) / 2, y + 10 + 23, esc(c))) + if ascii_: + b.append('0x%02X' % (x + (width * cw - 6) / 2, y + h + 26, ord(c))) + y += h + (58 if ascii_ else 40) + b.append('Each step combines neighboring lanes, in all lanes of the word at once:' % (L, y - 8)) + b.append('three multiplications instead of eight, and no branch.' % (L, y + 10)) + write("perf_blog_digits.svg", W, y + 22, "nj-charts--swar", "nj-blog-digits", + "Converting eight ASCII digits to their value with three multiplications", + "The text 12345678 as one word. Masking gives the digit values 1 to 8, one per byte. Multiplying by 10 times 2 to " + "the 8 plus 1 and shifting gives 12, 34, 56 and 78 in 16-bit lanes; multiplying by 100 times 2 to the 16 plus 1 " + "gives 1234 and 5678 in 32-bit lanes; multiplying by 10000 times 2 to the 32 plus 1 gives 12345678.", b) + + +# ---------- overview: speedup per workload (Google Benchmark rows, 3.12.0 time / 3.13.0 time) ---------- +# (group, label, speedup), copied from the table "The short version" +OVERVIEW = [ + ("Parsing", "twitter.json", 3.14), + ("Parsing", "citm_catalog.json", 4.25), + ("Parsing", "canada.json", 3.35), + ("Parsing", "canada.json, indented", 6.51), + ("Parsing", "citm, ordered_json", 6.85), + ("Parsing", "twitter, std::ifstream", 2.50), + ("Parsing", "citm, FILE*", 4.74), + ("Parsing", "citm, accept()", 7.07), + ("Writing", "dump() twitter", 6.70), + ("Writing", "dump() canada", 2.98), + ("Writing", "dump(4) citm", 4.70), + ("Writing", "to_cbor() twitter", 4.59), + ("Reading CBOR", "twitter, memory", 3.39), + ("Reading CBOR", "twitter, FILE*", 6.59), + ("Values", "diff() canada", 10.46), + ("Values", "iterate canada", 2.73), + ("Values", "copy + destroy citm", 1.13), + ("Values", "== citm", 1.06), +] + + +def overview(): + W, L, R = 560, 190, 520 + hi = max(v for _, _, v in OVERVIEW) + hi = math.ceil(hi + 0.5) + X = lambda v: L + v / hi * (R - L) + pitch, bh, top = 24, 15, 8 + b, desc = [], [] + y = top + group = None + rows = [] + for g, label, v in OVERVIEW: + if g != group: + if group is not None: + y += 10 + b.append('%s' % (8, y + 12, esc(g))) + y += 22 + group = g + rows.append((label, v, y)) + y += pitch + axis_y = y + 2 + for t in range(1, hi + 1): + b.append('' % (X(t), top, X(t), axis_y)) + b.append('%d%s' % (X(t), axis_y + 16, t, TIMES)) + for label, v, yy in rows: + b.append('%s' % (L - 8, yy + bh - 3, esc(label))) + b.append('%s: %s' % (hbar(X(0), X(v), yy, bh), esc(label), fx(v))) + b.append('%s' % (X(v) + 5, yy + bh - 3, fx(v))) + desc.append("%s %s" % (label, fx(v).replace(TIMES, "x"))) + b.append('' % (X(1), top, X(1), axis_y)) + b.append('' % (X(0), top, X(0), axis_y)) + b.append('speedup over 3.12.0 (3.12.0 = 1%s), more is better' + % ((L + R) / 2, axis_y + 34, TIMES)) + write("perf_blog_overview.svg", W, axis_y + 44, "nj-charts--blog", "nj-blog-overview", + "Speedup of 3.13.0 over 3.12.0 per workload, Apple M1 Max, Apple clang", + "Horizontal bars of the speedup, more is better. " + "; ".join(desc) + ".", b) + + +# ---------- distribution: how many of the suite's benchmarks got how much faster ---------- +# bins of the speedup (3.12.0 time / 3.13.0 time) over all rows of data/perf_suite.csv +BINS = [(0, 1, "below 1" + TIMES), (1, 1.5, "1 to 1.5" + TIMES), (1.5, 2, "1.5 to 2" + TIMES), + (2, 3, "2 to 3" + TIMES), (3, 5, "3 to 5" + TIMES), (5, 10, "5 to 10" + TIMES), (10, 1e9, "10" + TIMES + " or more")] + + +def distribution(): + rows = list(csv.DictReader((HERE / "data" / "perf_suite.csv").open())) + s = sorted(float(r["speedup"]) for r in rows) + n = len(s) + counts = [sum(lo <= v < hi for v in s) for lo, hi, _ in BINS] + geo = math.exp(sum(math.log(v) for v in s) / n) + med = (s[(n - 1) // 2] + s[n // 2]) / 2 + W, H = 560, 250 + L, R, T, B = 52, 548, 16, 196 + hi = 10 * math.ceil(max(counts) / 10 + 0.4) + Y = lambda c: B - c / hi * (B - T) + slot = (R - L) / len(BINS) + b, desc = [], [] + for t in range(0, hi + 1, 20): + b.append('' % (L, Y(t), R, Y(t))) + b.append('%d' % (L - 6, Y(t) + 4, t)) + for k, ((lo, _, label), c) in enumerate(zip(BINS, counts)): + x = L + k * slot + 8 + w = slot - 16 + cls = "nj-charts-c2" if lo < 1 else "nj-charts-c1" + b.append('%s: %d' + % (cls, x, Y(c), w, B - Y(c), label, c)) + b.append('%d' % (x + w / 2, Y(c) - 5, c)) + b.append('%s' % (x + w / 2, B + 16, label)) + desc.append("%s: %d" % (label.replace(TIMES, "x"), c)) + b.append('' % (L, B, R, B)) + b.append('speedup over 3.12.0, more is better' % ((L + R) / 2, H - 10)) + b.append('number of benchmarks' % (-(T + B) / 2)) + print("distribution: median %s, geometric mean %s" % (fx(med), fx(geo))) + write("perf_blog_distribution.svg", W, H, "nj-charts--blog", "nj-blog-dist", + "Speedup of 3.13.0 over 3.12.0 for all %d benchmarks of the suite" % n, + "Bars counting the benchmarks per speedup range: " + "; ".join(desc) + + ". Median %s, geometric mean %s." % (fx(med).replace(TIMES, "x"), fx(geo).replace(TIMES, "x")), b) + + +# ---------- timeline: one panel per workload ---------- +# (column in perf_timeline.csv, panel title, [(PR, label)]): each labeled step shows the number of the theme that +# explains it ("U" for the UTF-8 check of the binary readers that came and went); the appendix maps steps to PRs +TIMELINE = [ + ("parse_citm", "parse() citm_catalog.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5882, "4")]), + ("parse_canada", "parse() canada.json", [(5234, "4"), (5283, "1"), (5617, "3"), (5738, "3"), (5851, "3"), (5882, "4")]), + ("accept_twitter", "accept() twitter.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5853, "2")]), + ("parse_twitter_ifstream", "parse() twitter.json, std::ifstream", [(5828, "1"), (5884, "1")]), + ("dump_twitter", "dump() twitter.json", [(5285, "6"), (5738, "2"), (5878, "2"), (5883, "2")]), + ("dump_canada", "dump() canada.json", [(5285, "6"), (5634, "3")]), + ("from_cbor_twitter", "from_cbor() twitter", [(5233, "1"), (5501, "4"), (5185, "U"), (5746, "U")]), + ("to_cbor_twitter", "to_cbor() twitter", [(5328, "4"), (5824, "6"), (5885, "6")]), +] +MONTHS = [("2025-04", "3.12.0"), ("2026-09", "Sep 2026"), ("2026-10", "Oct")] + + +def timeline(): + rows = list(csv.DictReader((HERE / "data" / "perf_timeline.csv").open())) + n = len(rows) + W, H = 340, 270 + L, R, T, B = 44, 330, 66, 208 + for col, title, labels in TIMELINE: + vals = [float(r[col]) if r[col] else None for r in rows] + base = vals[0] + rel = [base / v if v else None for v in vals] # speedup over 3.12.0 + hi = max(x for x in rel if x) + top = 2 ** math.ceil(math.log2(hi * 1.3)) + Y = lambda s: B - math.log2(s) / math.log2(top) * (B - T) + X = lambda i: L + i / (n - 1) * (R - L) + b = ['%s' % (8, esc(title))] + t = 1 + while t <= top: + b.append('' % (L, Y(t), R, Y(t))) + b.append('%d%s' % (L - 6, Y(t) + 4, t, TIMES)) + t *= 2 + # month ticks: first commit of the month + seen = set() + for i, r in enumerate(rows): + m = r["date"][:7] + for key, name in MONTHS: + if m == key and key not in seen: + seen.add(key) + b.append('' % (X(i), B, X(i), B + 4)) + b.append('%s' % (X(i), B + 17, name)) + # a step line: each commit's value holds until the next commit + pts, prev = [], None + for i, s in enumerate(rel): + if s is None: + continue + if prev is not None: + pts.append("%.1f,%.1f" % (X(i), Y(prev))) + pts.append("%.1f,%.1f" % (X(i), Y(s))) + prev = s + b.append('' % " ".join(pts)) + # labels for named steps: a dot at the commit and its PR number above it; PRs a few commits apart share a + # label, and a label that would overlap one already placed moves up + groups = [] + for pr, lab in labels: + i = next(k for k, r in enumerate(rows) if r["pr"] == str(pr)) + if groups and X(i) - X(groups[-1][-1][1]) < 6: + groups[-1].append((pr, i, lab)) + else: + groups.append([(pr, i, lab)]) + # labels in two rows above the plot, each with a guide down to its dot + placed = [] + for g in groups: + i = g[-1][1] + x, y = X(i), Y(rel[i]) + for pr, k, lab in g: + b.append('#%s: %s' + % (X(k), Y(rel[k]), pr, fx(rel[k]))) + marks = list(dict.fromkeys(lab for _, _, lab in g)) + w = 18 * len(marks) - 3 + tx = min(max(x, L + w / 2), R - w / 2) + row = 0 + while any(r == row and abs(tx - px) < (w + pw) / 2 + 4 for px, r, pw in placed): + row += 1 + placed.append((tx, row, w)) + ty = 46 - 18 * row # the center of the badges + b.append('' % (x, ty + 8, x, y - 5)) + for k, mark in enumerate(marks): + cx = tx - w / 2 + 7.5 + 18 * k + b.append('' % ("" if mark.isdigit() else " nj-theme-dot--other", cx, ty)) + b.append('%s' % (cx, ty + 4, mark)) + b.append('' % (L, B, R, B)) + b.append('speedup over 3.12.0 (log scale), more is better' % (8, H - 8)) + final = rel[-1] + desc = ("%s: speedup over 3.12.0 at each of %d commits, ending at %s. Labeled steps, by theme: %s." + % (title, n, fx(final).replace(TIMES, "x"), ", ".join(lab for _, lab in labels))) + write("perf_blog_timeline_%s.svg" % col, W, H, "nj-charts--timeline", "nj-blog-tl-" + col, + "%s: speedup over 3.12.0 by commit" % title, desc, b) + + +# ---------- cliffs: 3.12.0 and 3.13.0 times on a log axis ---------- +# (operation, 3.12.0 ms, 3.13.0 ms), copied from the table in "Fix the algorithm first" +CLIFFS = [ + ("diff() 64k numbers vs []", 4237, 10.8), + ("diff() 20k objects vs half", 122, 4.13), + ("parse() callback, 32k objects", 1398, 12.1), + ("operator< nested 24 deep", 64.4, 0.002), + ("operator< citm, 10x", 284, 3.94), + ("flatten() citm, ordered_json", 271, 1.45), + ("to_bson() 200 deep, 100x", 20.3, 0.352), + ("push_back() 100k, diagnostics", 1589, 5.32), + ("at(i) 10k, diagnostics", 45.9, 0.088), +] + + +def cliffs(): + W, L, R = 600, 250, 585 + lo, hi = -3, 4 # 1 µs .. 10 s, in log10 ms + X = lambda ms: L + (math.log10(ms) - lo) / (hi - lo) * (R - L) + top, pitch = 40, 34 + b, desc = [], [] + axis_y = top + pitch * len(CLIFFS) - 10 + for e in range(lo, hi + 1): + b.append('' % (X(10 ** e), top - 10, X(10 ** e), axis_y)) + lab = {-3: "1 µs", -2: "10 µs", -1: "0.1 ms", 0: "1 ms", 1: "10 ms", 2: "0.1 s", 3: "1 s", 4: "10 s"}[e] + b.append('%s' % (X(10 ** e), axis_y + 16, lab)) + b.append('runtime (log scale), less is better' % ((L + R) / 2, axis_y + 34)) + b.append('') + b.append('3.12.0' % (L, L + 10)) + b.append('3.13.0' % (L + 80, L + 90)) + for i, (op, old, new) in enumerate(CLIFFS): + y = top + i * pitch + 8 + b.append('%s' % (L - 10, y + 4, esc(op))) + # an arrow from the old time to the new one, ending just before the new dot + b.append('' + % (X(old) - 6, y, X(new) + 7, y)) + b.append('%s, 3.12.0: %g ms' % (X(old), y, esc(op), old)) + b.append('%s, 3.13.0: %g ms' % (X(new), y, esc(op), new)) + b.append('%s' % ((X(old) + X(new)) / 2, y - 7, fx(old / new))) + desc.append("%s: %g ms to %g ms" % (op, old, new)) + write("perf_blog_cliffs.svg", W, axis_y + 44, "nj-charts--blog", "nj-blog-cliffs", + "Operations that grew quadratically or worse: time with 3.12.0 and 3.13.0, log scale", + "Dot plot on a logarithmic time axis, less is better; an arrow leads from each 3.12.0 time to the 3.13.0 time. " + "; ".join(desc) + ".", b) + + +# ---------- validating the files we didn't tune on, file by file ---------- +# data/perf_heldout_validate.json: per platform, file and library the fastest fully validating way of the validate +# use case on the 19 other files of simdjson's jsonexamples (reused parsers not chosen), extracted from +# summarize.py --json of the held-out run +HELDOUT = [("mac", "Apple M1 Max", "nj-charts-json-dot"), ("x86-gcc", "x86-64, GCC 16.2", "nj-charts-ojson-dot")] + + +def heldout(): + data = json.load((HERE / "data" / "perf_heldout_validate.json").open()) + files = sorted(data["mac"]) + rel, winner = {}, {} + for plat, _, _ in HELDOUT: + for f in files: + libs = data[plat][f] + # the fastest other library: below 1 json_document is the fastest, and the distance shows by how much + best = min((l for l in libs if l != "nlohmann json_document"), key=lambda l: libs[l]["us"]) + rel[plat, f] = libs["nlohmann json_document"]["us"] / libs[best]["us"] + winner[plat, f] = UC_LIBS.get(best, best) + files.sort(key=lambda f: (rel["x86-gcc", f], rel["mac", f])) + W, L, R = 620, 262, 486 + lo, hi = 0.4, 1.15 + X = lambda r: L + (r - lo) / (hi - lo) * (R - L) + top, pitch = 58, 20 + axis_y = top + pitch * len(files) + b, desc = [], [] + for t in (0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1): + b.append('' % (X(t), top - 8, X(t), axis_y)) + b.append('%.1f%s' % (X(t), axis_y + 16, t, TIMES)) + b.append('json_document’s time / the fastest other library’s, less is better' % ((L + R) / 2, axis_y + 34)) + x = 8 + for plat, name, cls in HELDOUT: + b.append('%s' % (cls, x + 5, x + 15, esc_md(name))) + x += 30 + 7.6 * len(name) + b.append('next on x86-64' % (R + 14, top - 10)) + for i, f in enumerate(files): + y = top + i * pitch + 6 + b.append('%s' % (L - 10, y + 4, esc_md(f))) + for k, (plat, name, cls) in enumerate(HELDOUT): + r = rel[plat, f] + b.append('%s, %s: %.2f%s the time of %s' + % (cls, X(max(lo, min(r, hi))), y - 3.5 + 7 * k, esc_md(f), esc_md(name), r, TIMES, esc_md(winner[plat, f]))) + w = winner["x86-gcc", f] + b.append('%s' + % (" nj-charts-best" if rel["x86-gcc", f] > 1.0005 else "", R + 14, y + 4, esc_md(w))) + desc.append("%s: Mac %.2f, x86-64 %.2f (%s)" % (f, rel["mac", f], rel["x86-gcc", f], w)) + b.append('' % (X(1), top - 8, X(1), axis_y)) + b.append('as fast as the next' % (X(1), top - 14)) + wins = {p: sum(rel[p, f] < 1 for f in files) for p, _, _ in HELDOUT} + print("heldout: json_document fastest on %s" % wins) + write("perf_blog_heldout.svg", W, axis_y + 44, "nj-charts--blog", "nj-blog-heldout", + "Validating 19 files 3.13.0 was not tuned on: json_document's time relative to the fastest other library per file", + "Dot plot per file, less is better; below 1.0 json_document is the fastest fully validating library. " + + "; ".join(desc) + ".", b) + + +# ---------- the price: compile time of two programs against 3.12.0 ---------- +# CPU time of the compiler in ms, median of 5 interleaved rounds, C++20, M1 Max (the post's appendix G) +# (3.12.0, 3.13.0, 3.13.0 with a precompiled header, 3.13.0 as a module) +PRICE = [ + ("Apple clang 21, -O0 (debug)", [("count_numbers", 955.0, 1320.5, 688.5, 917.5), ("server_config", 1113.2, 1496.4, 862.6, 1135.5)]), + ("Apple clang 21, -O2", [("count_numbers", 1393.2, 2081.0, 1458.4, 1684.6), ("server_config", 1753.5, 2545.6, 1925.3, 2168.6)]), + ("GCC 16, -O0 (debug)", [("count_numbers", 1569.4, 2548.4, 1725.0, 1699.8), ("server_config", 2025.4, 2985.1, 2301.6, 2325.8)]), + ("GCC 16, -O2", [("count_numbers", 2336.0, 3701.5, 2986.8, 2913.4), ("server_config", 3121.5, 4714.2, 4006.2, 4054.9)]), +] +PRICE_SERIES = [("3.13.0", "nj-charts-c2"), ("3.13.0, precompiled header", "nj-charts-c1"), ("3.13.0, module", "nj-charts-c3")] + + +def price(): + W, L, R = 600, 150, 560 + lo, hi = -50, 70 + X = lambda pct: L + (pct - lo) / (hi - lo) * (R - L) + pct = lambda new, old: round((new / old - 1) * 100) + lab = lambda p: (MINUS + "%d%%" % -p) if p < 0 else "+%d%%" % p + bh, pitch, gap = 11, 14, 10 + b, desc = [], [] + # the key above the plot + x = 8 + for name, cls in PRICE_SERIES: + b.append('' % (cls, x)) + b.append('%s' % (x + 18, esc(name))) + x += 18 + 8.2 * len(name) + 22 + top = 54 + b.append('as fast as 3.12.0' % (X(0), top - 8)) + y = top + for build, progs in PRICE: + b.append('%s' % (y + 14, esc(build))) + y += 24 + y0, at = y, len(b) + for prog, old, *new in progs: + b.append('%s' + % (L - 8, y + 1.5 * pitch + 2, prog)) + for (name, cls), t in zip(PRICE_SERIES, new): + p = pct(t, old) + b.append('%s, %s, %s: %s ms against %s ms with 3.12.0 (%s)' + % (cls, hbar(X(0), X(p), y, bh), prog, esc(build), esc(name), format(round(t), ","), format(round(old), ","), lab(p))) + if p < 0: + b.append('%s' % (X(p) - 5, y + bh - 1.5, lab(p))) + else: + b.append('%s' % (X(p) + 5, y + bh - 1.5, lab(p))) + desc.append("%s, %s, %s: %s" % (build, prog, name, lab(p).replace(MINUS, "-"))) + y += pitch + y += gap - (pitch - bh) + # the grid behind this panel's bars only, so that it doesn't cross the panel titles + b[at:at] = ['' % (X(t), y0 - 4, X(t), y - gap + 4) + for t in range(lo + 10, hi + 1, 20) if t] + y += 8 + axis_y = y + b.append('' % (X(0), top - 2, X(0), axis_y)) + for t in range(lo + 10, hi + 1, 20): + b.append('%s' % (X(t), axis_y + 16, "0" if t == 0 else lab(t))) + b.append('compile time compared with 3.12.0, less is better' % ((L + R) / 2, axis_y + 34)) + write("perf_blog_price.svg", W, axis_y + 44, "nj-charts--blog", "nj-blog-price", + "Compile time of two programs with 3.13.0, alone, with a precompiled header and as a module, compared with 3.12.0", + "Horizontal bars of the change in compile time against 3.12.0, less is better. " + "; ".join(desc) + ".", b) + + +# ---------- use cases: libraries x use cases, relative time ---------- +# data/perf_usecases_.json is written by tests/benchmarks/json_view/others/summarize.py --json +UC_FILES = ["twitter", "citm_catalog", "canada", "jeopardy"] +USE_CASES = [("validate", "validate"), ("sum", "sum"), ("select", "select"), + ("edit", "edit"), ("minify", "minify"), ("write", "write")] +UC_LIBS = { # library in the JSON -> row label + "nlohmann json_document": "nlohmann/json json_document", "nlohmann json": "nlohmann/json json", + "yyjson": "yyjson", "simdjson": "simdjson", "sonic-cpp": "sonic-cpp", "Glaze": "Glaze", "Boost.JSON": "Boost.JSON", + "RapidJSON": "RapidJSON", "sonic-rs": "sonic-rs (Rust)", "simd-json": "simd-json (Rust)", "serde_json": "serde_json (Rust)", +} +UC_PLATFORMS = [("mac", "Use cases: time of each library relative to the fastest, Apple M1 Max"), + ("x86-gcc", "Use cases: time of each library relative to the fastest, x86-64 with GCC 16.2"), + ("x86-gcc13", "Use cases: time of each library relative to the fastest, x86-64 with GCC 13"), + ("x86-clang", "Use cases: time of each library relative to the fastest, x86-64 with Clang 23")] +LEVEL_MARK = {"no UTF-8": "U", "partial": "P", "full": ""} +# why a cell is empty (the tooltips of the n/a cells) +NA = {("simdjson", "edit"): "simdjson's documents are read-only: it has no API to change a value and write the result"} + + +def geomean(xs): + return math.exp(sum(math.log(x) for x in xs) / len(xs)) + + +WRITING = ("edit", "minify", "write") # the use cases that write numbers +NUMBER_TEXT = ("source numbers", "raw numbers") # variants that write each number by copying its text + + +def normalize_usecases(data): + """Chooses each library's best variants again with the rules of the post: variants that reuse a parser or document + across calls are measured but not chosen. Variants that write each number by copying its text instead of formatting + it (json_document's number_format::source, yyjson's and RapidJSON's raw numbers in edit, minify and write) are not + chosen as the fully validating way, but as a way that does less, marked "N" like "U" and "P". Skipping the number + conversion while reading is allowed. Each pick has a "mark": "", or the letters of what it skips""" + data = json.loads(json.dumps(data)) + rank = {"full": 0, "n/a": 0, "no UTF-8": 1, "partial": 2} + for uc, files in data.items(): + numtext = lambda k: uc in WRITING and any(w in k for w in NUMBER_TEXT) + for cell in files.values(): + for e in cell.values(): + vs = [(v["us"], k, v["level"]) for k, v in e["variants"].items() if "reused" not in k] + full = [v for v in vs if rank[v[2]] == 0 and not numtext(v[1])] + pick = lambda v: {"us": v[0], "variant": v[1], "level": "full" if rank[v[2]] == 0 else v[2], + "mark": " ".join(m for m in (LEVEL_MARK.get(v[2], ""), "N" if numtext(v[1]) else "") if m)} + e["best"] = pick(min(full)) if full else None + e["best_any"] = pick(min(vs)) + return data + + +FILE_NAMES = {"twitter": "twitter.json", "citm_catalog": "citm_catalog.json", "canada": "canada.json", + "jeopardy": "jeopardy.json"} +# what a variant that checks less skips, worded as the trade it is (the tooltips of the heatmaps) +CHECKS_LESS = [ + ("simdjson", "On-Demand", "reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets"), + ("simdjson", "minify", "simdjson::minify() only removes whitespace, without parsing the values"), + ("Glaze", "lazy_json", "reads lazily: lazy_json reads only what you ask for and steps over the rest"), + ("Glaze", "minify_json", "minify_json only removes whitespace, without parsing the values"), + ("Glaze", "generic", "accepts trailing garbage after the value: Glaze's default (validate_trailing_whitespace checks it)"), + ("Glaze", "structs", "reads into structs and steps over fields it doesn't know without checking them " + "(validate_skipped checks them too)"), + ("RapidJSON", "", "trusts UTF-8: RapidJSON's default (kParseValidateEncodingFlag checks it)"), + ("sonic-cpp", "", "trusts UTF-8: sonic-cpp 1.0.2 doesn't check it"), + ("serde_json", "", "trusts UTF-8 in the strings it skips (from_slice); strings it reads are checked"), +] +# what a variant that copies number text does (the "N" half of edit, minify and write) +NUMBER_TEXT_TIPS = { + "nlohmann json_document": "copies each number's text instead of formatting it (number_format::source)", + "yyjson": "copies each number's text instead of formatting it (YYJSON_READ_NUMBER_AS_RAW)", + "RapidJSON": "copies each number's text instead of formatting it (kParseNumbersAsStringsFlag)", +} + + +def checks_less(lib, variant): + for l, v, text in CHECKS_LESS: + if l == lib and v in variant: + return text + return "checks less" + + +def usecase_table(data): + """{library: {use case: cell}}: per library the geometric mean over UC_FILES of its fastest fully validating time + ("full") and of its fastest time at any level ("alt", only if it is at least 3 % faster), each divided by the best + such fully validating mean in the use case, so that every file counts equally and the fastest library is 1.00""" + out = {} + data = normalize_usecases(data) + for uc, _ in USE_CASES: + files = data.get(uc, {}) + if not files: + continue + cells = {} + for lib in UC_LIBS: + es = [files.get(f, {}).get(lib) for f in UC_FILES] + if not all(es): + continue + full = [e["best"] for e in es] + alt = [e["best_any"] for e in es] + cells[lib] = {"full": geomean([b["us"] for b in full]) if all(full) else None, "alt": geomean([a["us"] for a in alt]), + "files": [(f, b, a) for f, b, a in zip(UC_FILES, full, alt)]} + ref = min(c["full"] for c in cells.values() if c["full"]) + for lib, c in cells.items(): + full = c["full"] / ref if c["full"] else None + alt = c["alt"] / ref + if full is not None and alt > full * 0.97: + alt = None + levels = {a["level"] for _, _, a in c["files"]} if alt is not None else set() + level = "partial" if "partial" in levels else "no UTF-8" if "no UTF-8" in levels else "full" + numtext = alt is not None and any("N" in a["mark"].split() for _, _, a in c["files"]) + marks = " ".join(m for m in (LEVEL_MARK[level], "N" if numtext else "") if m) + out.setdefault(lib, {})[uc] = {"full": full, "alt": alt, "level": level, "marks": marks, "files": c["files"]} + return out + + +# cell colors: green for the fastest, gray around twice the time, red for the slowest; the upper bounds of the steps +HEAT_STEPS = [1.15, 1.5, 2.5, 5, float("inf")] +HEAT_LABELS = ["below 1.15", "1.15 to 1.5", "1.5 to 2.5", "2.5 to 5", "5 and more"] + + +def heat(r): + return next(i for i, b in enumerate(HEAT_STEPS) if r < b) + + +def fr(r): + return "%.2f" % r if r < 9.995 else "%.1f" % r if r < 99.95 else "%.0f" % r + + +def fus(us): + return "{:,.0f} µs".format(us) if us >= 100 else "%.1f µs" % us + + +def tip(lib, uc_label, c, half): + """the tooltip of a cell: lines separated by newlines ( in the attribute), the first one the heading""" + if half == "full": + lines = ["%s · %s" % (UC_LIBS[lib], uc_label), + "%s× the time of the fastest library (fully validating)" % fr(c["full"])] + picks = [(f, b) for f, b, _ in c["files"]] + else: + lines = ["%s · %s, checking less" % (UC_LIBS[lib], uc_label), + "%s× the time of the fastest fully validating library" % fr(c["alt"])] + picks = [(f, a) for f, _, a in c["files"]] + ways = sorted({e["variant"] for _, e in picks}) + if len(ways) == 1: + lines.append("way: %s" % ways[0]) + for f, e in picks: + lines.append("%s: %s%s%s" % (FILE_NAMES[f], fus(e["us"]), "" if len(ways) == 1 else " · " + e["variant"], + " (validates fully)" if half == "alt" and e["level"] == "full" else "")) + if half == "alt": + seen = [] + for _, e in picks: + ts = ([checks_less(lib, e["variant"])] if e["level"] != "full" else []) + \ + ([NUMBER_TEXT_TIPS.get(lib, "copies each number's text instead of formatting it")] if "N" in e["mark"].split() else []) + for t in ts: + if t not in seen: + seen.append(t) + lines += seen + if any("(copy)" in e["variant"] for _, e in picks): + lines.append("(copy): parses in place, on a copy of the input that is part of the time") + return " ".join(lines) + + +def heatmap(platform, title): + data = json.load((HERE / "data" / ("perf_usecases_%s.json" % platform)).open()) + t = usecase_table(data) + libs = [l for l in UC_LIBS if l in t] + score = lambda l: geomean([v["full"] or v["alt"] for v in t[l].values()]) # the mean of the row as shown + libs.sort(key=score) + W, L, cw, ch, top = 784, 224, 92, 36, 44 + b, desc = [], [] + for j, (uc, label) in enumerate(USE_CASES): + b.append('%s' % (L + j * cw + cw / 2, top - 10, esc(label))) + for i, lib in enumerate(libs): + y = top + i * ch + cls = "nj-charts-name-json" if lib.startswith("nlohmann") else "" + b.append('%s' % (cls, L - 8, y + ch / 2 + 4, esc(UC_LIBS[lib]))) + for j, (uc, label) in enumerate(USE_CASES): + x = L + j * cw + c = t[lib].get(uc) + if c is None: + b.append('' % esc("%s · %s %s" % (UC_LIBS[lib], label, NA.get((lib, uc), "the library has no API for this use case")))) + b.append('' % (x + 1, y + 1, cw - 2, ch - 2)) + b.append('n/a' % (x + cw / 2, y + ch / 2 + 4)) + b.append('') + desc.append("%s %s: n/a" % (UC_LIBS[lib], label)) + continue + halves = [] + if c["full"] is not None: + halves.append(("full", c["full"])) + if c["alt"] is not None: + halves.append(("alt", c["alt"])) + hw = (cw - 2) / len(halves) + for k, (half, r) in enumerate(halves): + hx = x + 1 + k * hw + gap = 1 if len(halves) == 2 else 0 + b.append('' % esc(tip(lib, label, c, half))) + b.append('' + % (heat(r), hx + (gap if k else 0), y + 1, hw - gap, ch - 2)) + cx = hx + hw / 2 + if half == "alt": + b.append('%s' % (cx, y + 16, fr(r))) + b.append('%s' + % (cx, y + 29, c["marks"])) + else: + b.append('%s' % (cx, y + ch / 2 + 4, fr(r))) + b.append('') + if c["full"] is None: # no fully validating way: the left half stays empty + pass + desc.append("%s %s: %s%s" % (UC_LIBS[lib], label, fr(c["full"]) if c["full"] else "no fully validating way", + (" (%s doing less, %s)" % (fr(c["alt"]), c["marks"])) if c["alt"] else "")) + # the key, set apart from the grid and narrower than its columns, so that it doesn't read as a row of it + yb = top + len(libs) * ch + 28 + b.append('time relative to the fastest fully validating library, less is better' % (yb + 4)) + kw, ky = 76, yb + 14 + for i, lab in enumerate(HEAT_LABELS): + # each swatch in its own group, so that the ink rule for the strong steps (a sibling selector) stays inside it + b.append('' % (i, 8 + i * (kw + 4), ky, kw)) + b.append('%s' % (8 + i * (kw + 4) + kw / 2, ky + 14, esc(lab))) + nx = 8 + len(HEAT_LABELS) * (kw + 4) + 12 + b.append('' % (nx, ky, 40)) + b.append('n/a' % (nx + 20, ky + 14)) + b.append('no API for it' % (nx + 48, ky + 14)) + write("perf_blog_usecases_%s.svg" % platform, W, ky + 28, "nj-charts--blog nj-charts--heat", "nj-blog-uc-" + platform, title, + "Table of relative times, libraries by use case. " + "; ".join(desc) + ".", b) + + +if __name__ == "__main__": + swar() + overlap() + digits() + heldout() + if OVERVIEW: + overview() + distribution() + if TIMELINE: + timeline() + if CLIFFS: + cliffs() + price() + for platform, title in UC_PLATFORMS: + if (HERE / "data" / ("perf_usecases_%s.json" % platform)).exists(): + heatmap(platform, title) diff --git a/docs/mkdocs/scripts/figures/perf_blog_tables.py b/docs/mkdocs/scripts/figures/perf_blog_tables.py new file mode 100644 index 000000000..84f39daea --- /dev/null +++ b/docs/mkdocs/scripts/figures/perf_blog_tables.py @@ -0,0 +1,66 @@ +"""Prints the tables of Appendix E of home/blog/how_3_13_0_got_faster.md (comparison with other libraries) as Markdown, +from data/perf_usecases_.json, which tests/benchmarks/json_view/others/summarize.py --json writes. + +Usage: python3 scripts/figures/perf_blog_tables.py [title] +""" +import json +import sys +from pathlib import Path + +from perf_blog import normalize_usecases + +HERE = Path(__file__).resolve().parent +FILES = [("twitter", "`twitter.json`"), ("citm_catalog", "`citm_catalog.json`"), ("canada", "`canada.json`"), + ("jeopardy", "`jeopardy.json`"), ("status", "one status (2.5 KB)")] +USE_CASES = [("validate", "validate"), ("sum", "sum"), ("select", "select"), ("edit", "edit"), ("minify", "minify"), + ("write", "write")] +NAMES = {"nlohmann json_document": "nlohmann/json `json_document`", "nlohmann json": "nlohmann/json `json`", + "sonic-rs": "sonic-rs (Rust)", "simd-json": "simd-json (Rust)", "serde_json": "serde_json (Rust)"} + + +def fmt(us): + if us >= 10000: + return "{:,.0f}".format(us) + if us >= 100: + return "{:,.0f}".format(us) + return "%.1f" % us + + +def table(data, uc, indent): + files = [f for f, _ in FILES if f in data.get(uc, {})] + libs = list(data[uc][files[0]].keys()) + jd = lambda f: data[uc][f]["nlohmann json_document"]["best"]["us"] + libs.sort(key=lambda l: sum(((data[uc][f][l]["best"] or data[uc][f][l]["best_any"])["us"] / jd(f)) for f in files)) + head = "| library | variant | " + " | ".join(n for f, n in FILES if f in files) + " |" + rows = [head, "| --- | --- | " + " | ".join("--:" for _ in files) + " |"] + for lib in libs: + best = [data[uc][f][lib]["best"] for f in files] + anyv = [data[uc][f][lib]["best_any"] for f in files] + names = sorted({b["variant"] for b in best if b} | {a["variant"] + " [%s]" % a["mark"] for b, a in zip(best, anyv) if a["mark"] and (not b or a["us"] < b["us"])}) + cells = [] + for b, a in zip(best, anyv): + c = fmt(b["us"]) if b else "–" + if a["mark"] and (not b or a["us"] < b["us"] * 0.97): + c += " (%s %s)" % (a["mark"], fmt(a["us"])) + cells.append(c) + bold = "**%s**" if lib == "nlohmann json_document" else "%s" + rows.append("| %s | %s | %s |" % (bold % NAMES.get(lib, lib), ", ".join(names), " | ".join(cells))) + return "\n".join(indent + r for r in rows) + + +def main(): + platform = sys.argv[1] + data = json.load((HERE / "data" / ("perf_usecases_%s.json" % platform)).open()) + data = normalize_usecases(data) # the same choices as the figure + out = [] + for uc, label in USE_CASES: + if uc not in data: + continue + out.append("**%s**\n" % label) + out.append(table(data, uc, "")) + out.append("") + print("\n".join(out)) + + +if __name__ == "__main__": + main() diff --git a/tests/benchmarks/README.md b/tests/benchmarks/README.md index 132bbb74a..ff85e20d3 100644 --- a/tests/benchmarks/README.md +++ b/tests/benchmarks/README.md @@ -138,6 +138,9 @@ the `View*` benchmarks (in `src/benchmarks_view.cpp`) are only built if the dire Only benchmarks present in both result files are compared, so for older releases, either filter the benchmarks or build that release's own `tests/benchmarks` against its own header. +To find out *which commit* changed a number, [`history/`](history/README.md) times one fixed program against the +header of every commit that changed it. + ## Getting stable numbers - Build and run both versions on the same machine with the same compiler and Google Benchmark, one right after the diff --git a/tests/benchmarks/history/README.md b/tests/benchmarks/history/README.md new file mode 100644 index 000000000..748576033 --- /dev/null +++ b/tests/benchmarks/history/README.md @@ -0,0 +1,43 @@ +# Performance history + +The benchmarks in [`tests/benchmarks`](../README.md) compare two versions. The program here answers a different +question: *which commit* made something faster or slower. `history.cpp` is one fixed benchmark that uses only API +3.12.0 already has. `history.py` compiles it against the `single_include` of every first-parent commit that changed +`json.hpp` or `json_view.hpp`, runs all of them interleaved, and writes one CSV row per commit with its pull request. +The timeline in the post [How 3.13.0 got faster](https://json.nlohmann.me/home/blog/how_3_13_0_got_faster/) comes from +it. It is not built by CMake or run by CI. + +## Workloads + +| name | what it does | +|---|---| +| `parse_twitter`, `parse_citm`, `parse_canada` | `json::parse()` of a `std::string` (`citm_catalog.json` as distributed is indented by four spaces) | +| `parse_citm_compact` | the same with a minified copy of `citm_catalog.json` | +| `parse_twitter_ifstream` | `json::parse()` of an `std::ifstream`, opening the file included | +| `accept_twitter` | `json::accept()` | +| `view_parse_*` | `json_document::parse()`; only where the header has `json_view.hpp` | +| `dump_twitter`, `dump_citm`, `dump_canada`, `dump4_citm` | `dump()` and `dump(4)` | +| `from_cbor_twitter`, `to_cbor_twitter` | read and write CBOR | +| `copy_destroy_citm` | copy a parsed document and destroy the copy | +| `equal_citm` | copy a parsed document and compare it with `==` | + +Each workload runs in batches of at least 20 ms; the program prints the median of 9 batches in microseconds per call. + +## Running it + +```sh +mkdir -p ~/history/data +cp /nativejson-benchmark/{twitter,citm_catalog,canada}.json ~/history/data/ +python3 history.py build --repo ../../.. --work ~/history # about 300 builds, a few minutes in parallel +caffeinate -i python3 history.py run --work ~/history --rounds 4 # about 1 h 45 min on an M1 Max (about 4 s per binary and round) +python3 history.py summarize --work ~/history > history.csv +``` + +`--extra DIR` adds one more header directory, such as an amalgamation of `develop` with open pull requests merged +in. `run` waits whenever the 1-minute load average is 4 or more. + +## Reading the results + +A single commit can move a workload by a few percent through code layout alone: the functions it did not touch +move to other addresses. Read a change as a step only if it is larger than that and stays. To check one, time the +two commits against each other with more rounds, or compare instruction counts. diff --git a/tests/benchmarks/history/history.cpp b/tests/benchmarks/history/history.cpp new file mode 100644 index 000000000..c16fd9d62 --- /dev/null +++ b/tests/benchmarks/history/history.cpp @@ -0,0 +1,98 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ (supporting code) +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + +// One fixed benchmark, compiled against the json.hpp of every commit that changed it (see README.md). +// It uses only API that 3.12.0 has; the json_document rows exist only where the header has json_view.hpp. +// Usage: history +// Prints one line per workload: the name and the median of 9 batches in microseconds per call. +#include +#if __has_include() && !defined(HISTORY_NO_VIEW) + #include + #define HISTORY_VIEW 1 +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using nlohmann::json; +static std::string slurp(const std::string& p) +{ + std::ifstream f(p, std::ios::binary); + std::stringstream s; + s << f.rdbuf(); + return s.str(); +} +static volatile std::size_t sink; + +static void bench(const char* name, const std::function& f) +{ + using clk = std::chrono::steady_clock; + sink = f(); // warm up + std::size_t n = 1; + for (;;) + { + auto t0 = clk::now(); + for (std::size_t i = 0; i < n; ++i) + { + sink = f(); + } + double dt = std::chrono::duration(clk::now() - t0).count(); + if (dt > 0.02) + { + break; + } + n *= 2; + } + std::vector v; + for (int b = 0; b < 9; ++b) + { + auto t0 = clk::now(); + for (std::size_t i = 0; i < n; ++i) + { + sink = f(); + } + v.push_back(std::chrono::duration(clk::now() - t0).count() / n); + } + std::sort(v.begin(), v.end()); + std::cout << name << ' ' << std::fixed << std::setprecision(3) << v[4] << '\n'; +} + +int main(int, char** argv) +{ + std::string d = argv[1]; + const std::string tw = slurp(d + "/twitter.json"), ci = slurp(d + "/citm_catalog.json"), + ca = slurp(d + "/canada.json"), cii = slurp(d + "/citm_compact.json"); + const json jtw = json::parse(tw), jci = json::parse(ci), jca = json::parse(ca); + const std::vector cbtw = json::to_cbor(jtw); + + bench("parse_twitter", [&] { return json::parse(tw).size(); }); + bench("parse_citm", [&] { return json::parse(ci).size(); }); + bench("parse_canada", [&] { return json::parse(ca).size(); }); + bench("parse_citm_compact", [&] { return json::parse(cii).size(); }); + bench("parse_twitter_ifstream", [&] { std::ifstream f(d + "/twitter.json"); return json::parse(f).size(); }); + bench("accept_twitter", [&] { return static_cast(json::accept(tw)); }); +#ifdef HISTORY_VIEW + bench("view_parse_twitter", [&] { const auto doc = nlohmann::json_document::parse(tw); return doc.root().size(); }); + bench("view_parse_citm", [&] { const auto doc = nlohmann::json_document::parse(ci); return doc.root().size(); }); + bench("view_parse_canada", [&] { const auto doc = nlohmann::json_document::parse(ca); return doc.root().size(); }); +#endif + bench("dump_twitter", [&] { return jtw.dump().size(); }); + bench("dump_citm", [&] { return jci.dump().size(); }); + bench("dump_canada", [&] { return jca.dump().size(); }); + bench("dump4_citm", [&] { return jci.dump(4).size(); }); + bench("from_cbor_twitter", [&] { return json::from_cbor(cbtw).size(); }); + bench("to_cbor_twitter", [&] { return json::to_cbor(jtw).size(); }); + bench("copy_destroy_citm", [&] { json c = jci; return c.size(); }); + bench("equal_citm", [&] { json c = jci; return static_cast(c == jci); }); +} diff --git a/tests/benchmarks/history/history.py b/tests/benchmarks/history/history.py new file mode 100755 index 000000000..3bbfe8c32 --- /dev/null +++ b/tests/benchmarks/history/history.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +# __ _____ _____ _____ +# __| | __| | | | JSON for Modern C++ (supporting code) +# | | |__ | | | | | | version 3.12.0 +# |_____|_____|_____|_|___| https://github.com/nlohmann/json +# +# SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +# SPDX-License-Identifier: MIT + +"""Time one fixed benchmark against the json.hpp of every commit that changed it. + +Usage: + history.py build --repo REPO --work DIR [--from v3.12.0] [--to origin/develop] [--extra INCLUDE_DIR] + history.py run --work DIR [--rounds 4] + history.py summarize --work DIR [--repo REPO] > history.csv + +build: lists the first-parent commits between --from and --to that changed single_include/nlohmann/json.hpp or +json_view.hpp, extracts single_include/ of each (and of --from itself), and compiles history.cpp against it into +DIR/bin/NNN, NNN being the line of the commit in DIR/commits.txt. --extra adds one more header directory at the end, +for example an amalgamation of develop with open pull requests merged in. It also writes the input files to DIR/data +(the nativejson-benchmark files from the test data, which must be in DIR/data already, plus a minified copy of +citm_catalog.json). + +run: runs every binary once per round, in a new random order each round, and only while the 1-minute load average is +below 4. Output: DIR/res/NNN-R.txt. + +summarize: the median over the rounds per binary and workload, as CSV with the commit, its date and its pull request. + +Only the Python 3 standard library is used; a C++17 compiler (c++) and git are needed. +""" +import argparse +import concurrent.futures +import csv +import json +import os +import random +import re +import statistics +import subprocess +import sys +import time +from pathlib import Path + +HERE = Path(__file__).resolve().parent +FLAGS = ["-std=c++17", "-O3", "-DNDEBUG", "-w"] + + +def git(repo, *args): + return subprocess.run(["git", "-C", str(repo), *args], check=True, capture_output=True, text=True).stdout + + +def build_one(work, idx, rev, repo): + hdr = work / "hdr" / idx + hdr.mkdir(parents=True, exist_ok=True) + if rev.startswith("dir:"): + subprocess.run(["cp", "-R", rev[4:] + "/nlohmann", str(hdr)], check=True) + else: + archive = subprocess.run(["git", "-C", str(repo), "archive", rev, "single_include/nlohmann"], + check=True, capture_output=True).stdout + subprocess.run(["tar", "-x", "-C", str(hdr), "--strip-components=1"], input=archive, check=True) + out = work / "bin" / idx + cmd = ["c++", *FLAGS, "-I", str(hdr), str(HERE / "history.cpp"), "-o", str(out)] + # json_view.hpp of the first commits that had it may not compile with history.cpp: time json.hpp alone then + if subprocess.run(cmd, capture_output=True).returncode != 0: + if subprocess.run(cmd[:-4] + ["-DHISTORY_NO_VIEW"] + cmd[-4:], capture_output=True).returncode != 0: + return "FAIL %s %s" % (idx, rev) + return None + + +def build(a): + work, repo = Path(a.work), Path(a.repo) + (work / "bin").mkdir(parents=True, exist_ok=True) + revs = [a.__dict__["from"]] + git(repo, "log", "--first-parent", "--reverse", "--format=%H", + "%s..%s" % (a.__dict__["from"], a.to), "--", + "single_include/nlohmann/json.hpp", "single_include/nlohmann/json_view.hpp").split() + if a.extra: + revs.append("dir:" + str(Path(a.extra).resolve())) + (work / "commits.txt").write_text("\n".join(revs) + "\n") + data = work / "data" + citm = json.loads((data / "citm_catalog.json").read_text(encoding="utf-8")) + (data / "citm_compact.json").write_text(json.dumps(citm, separators=(",", ":"), ensure_ascii=False), encoding="utf-8") + with concurrent.futures.ThreadPoolExecutor(os.cpu_count()) as ex: + for r in ex.map(lambda p: build_one(work, "%03d" % p[0], p[1], repo), enumerate(revs)): + if r: + print(r, file=sys.stderr) + + +def load(): + out = subprocess.run(["sysctl", "-n", "vm.loadavg"], capture_output=True, text=True).stdout + return float(out.split()[1]) if out else os.getloadavg()[0] + + +def run(a): + work = Path(a.work) + (work / "res").mkdir(exist_ok=True) + bins = sorted(p.name for p in (work / "bin").iterdir()) + for r in range(1, a.rounds + 1): + random.shuffle(bins) + for b in bins: + while load() >= 4: + time.sleep(15) + out = subprocess.run([str(work / "bin" / b), str(work / "data")], check=True, capture_output=True, text=True) + (work / "res" / ("%s-%d.txt" % (b, r))).write_text(out.stdout) + print("round %d done" % r, file=sys.stderr) + + +def summarize(a): + work = Path(a.work) + revs = (work / "commits.txt").read_text().split() + times, names = {}, [] + for f in sorted((work / "res").glob("*.txt")): + idx = int(f.name.split("-")[0]) + for line in f.read_text().splitlines(): + name, us = line.split() + if name not in names: + names.append(name) + times.setdefault((idx, name), []).append(float(us)) + w = csv.writer(sys.stdout, lineterminator="\n") + w.writerow(["index", "commit", "date", "pr", "subject"] + names) + for idx, rev in enumerate(revs): + if rev.startswith("dir:"): + sha, date, pr, subject = "candidate", "", "", "develop + open pull requests" + else: + sha, date, subject = git(a.repo, "log", "-1", "--format=%h%x09%cs%x09%s", rev).strip().split("\t") + m = re.search(r"\(#(\d+)\)$", subject) + pr = m.group(1) if m else "" + w.writerow([idx, sha, date, pr, subject] + + ["%.3f" % statistics.median(times[(idx, n)]) if (idx, n) in times else "" for n in names]) + + +def main(): + p = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + sub = p.add_subparsers(dest="cmd", required=True) + b = sub.add_parser("build") + b.add_argument("--repo", required=True) + b.add_argument("--work", required=True) + b.add_argument("--from", default="v3.12.0") + b.add_argument("--to", default="origin/develop") + b.add_argument("--extra") + r = sub.add_parser("run") + r.add_argument("--work", required=True) + r.add_argument("--rounds", type=int, default=4) + s = sub.add_parser("summarize") + s.add_argument("--work", required=True) + s.add_argument("--repo", default=str(HERE.parents[2])) + a = p.parse_args() + {"build": build, "run": run, "summarize": summarize}[a.cmd](a) + + +if __name__ == "__main__": + main() diff --git a/tests/benchmarks/json_view/others/README.md b/tests/benchmarks/json_view/others/README.md new file mode 100644 index 000000000..fc32d3de4 --- /dev/null +++ b/tests/benchmarks/json_view/others/README.md @@ -0,0 +1,249 @@ +# json_document against other JSON libraries + +[`compare.py`](../compare.py) compares `json_document` with yyjson, simdjson and Boost.JSON. The programs here add +sonic-cpp, RapidJSON and Glaze in C++, and sonic-rs, simd-json and serde_json in Rust, for the post +[How 3.13.0 got faster](https://json.nlohmann.me/home/blog/how_3_13_0_got_faster/#how-it-compares). They are not +built by CMake or run by CI. + +## What is measured + +The programs compare **use cases**, not library functions. A library may implement a use case in every reasonable way +(another API, SAX events, in-situ parsing, a struct binding); each such way is a *variant*, named +`: ` (`yyjson: insitu (copy)`, `RapidJSON: SAX`, `nlohmann json_document: accept`). The report shows +each library's fastest correct variant. `nlohmann json` (`basic_json`) and `nlohmann json_document` (with +`json_view`) count as two libraries. + +| use case | what it does | +|---|---| +| `validate` | is this text valid JSON? returns a bool | +| `sum` | visit every value, convert every number, touch every string and key; sum all numbers in document order | +| `select` | read a few fields of every record (the fields of `bench_view.cpp`, e.g. `id`, `user.screen_name` and `retweet_count` of every status) | +| `edit` | change some values of every record and write the document as compact JSON (see below) | +| `minify` | text in, compact text out | +| `write` | write a document parsed beforehand as compact JSON; only the writing is timed | + +The edits: + +| file | edit | +|---|---| +| `twitter.json` | for every element of `statuses`: `retweet_count` + 1, erase `entities`, add `"seen": true` | +| status | the same edit on the one status | +| `citm_catalog.json` | for every element of `performances`: `start` + 1, erase `seatMapImage`, add `"seen": true` | +| `canada.json` | `features[0].properties.name` = `"Kanada"`; append `[0.5,0.25]` to the first ring (`geometry.coordinates[0]`) of every feature | +| `jeopardy.json` | for every record: `value` = `null`, erase `air_date`, add `"seen": true` | + +The files are `twitter.json`, `citm_catalog.json`, `canada.json` (nativejson-benchmark), `jeopardy.json`, the first +status of `twitter.json` (`status`; written by `json::dump()`, timed in batches of 200), and `twitter_min` and +`citm_catalog_min`: `twitter.json` and `citm_catalog.json` with all whitespace outside strings removed, built in memory at +startup by the same small function in both programs (`strip_ws`; the bytes inside strings are untouched). The minified +files use the select and edit of their originals. + +### Input contract + +The input is a `const std::string` holding the file, with at least 64 bytes of spare capacity (`reserve`), so libraries +that need padding (simdjson) can use it without a copy. A variant that modifies the input (in-situ parsing: yyjson +`YYJSON_READ_INSITU`, RapidJSON `ParseInsitu`, simd-json) copies it inside the timed call; its name says `(copy)`. +The C++ in-situ variants also run as `(copy untimed)`: the copy is made before the timer starts and freed after it +stops, as for a program that reads a file into a buffer it owns and no longer needs. They are reported but never +chosen as a library's best. `json_document`'s `parse_copy` is the opposite case: a document that owns a copy of its +text. +Each timed call starts from the text and frees everything it built, except variants named `(reused)` or +`(reused allocator)`, which keep a parser, document or allocator across calls (simdjson's reused parsers, +`json_document::read()`, Boost.JSON's reset `parser` and `basic_parser`, yyjson's dynamic allocator, RapidJSON's +user-buffer allocators, simd-json's buffers). These are reported but never chosen as a library's best; +`summarize.py` reports each library's best reused variant separately. In Rust, the input is the file as bytes (`&[u8]`), so every library +has to validate UTF-8 itself. + +### Correctness rules + +Before timing, every variant runs on the file and must produce the right result: + +- `validate`: `true`. +- `sum`: the same number of values, the same number of string and key bytes, and a sum of all numbers that is + bit-identical to `json_document`'s (document order), so every number is converted exactly; variants that visit + objects in another order (`nlohmann json: parse`, simd-json and serde_json values) are compared within 1e-9. +- `select`: the same value as `json_document`. A variant that does not convert numbers (`(raw numbers)`, + `(numbers: none)`) has to convert the numbers it selects exactly itself. +- `edit`, `minify`, `write`: the output, read with `json::parse`, compares equal (`==`) to the expected document (for + `edit`, the edit applied to a `json` value; floats compare exactly, so every float must be written exactly). In + Rust, `serde_json::Value` (with `float_roundtrip`) is the reference. + +A variant that gives a wrong result on a file, or crashes on it, is printed as +`excluded: | | ` and not timed. + +### Validation levels + +Except for `write`, every variant is also probed with four malformed inputs derived from each file: the file +truncated by one byte (after trailing whitespace), the file followed by ` ]x` (trailing garbage), a stray `,` before +the first `}` (before the last `]` in a file without objects), and a `0xFF` byte inside a string value (the first in +the second half of the file, or the last one; never a key, so that a variant that accepts the byte still finds the +keys it looks up; a file without string values gets no `0xFF` probe). The probes run in a child process, so a crash is caught. The result is the +variant's *validation level*, printed in its cell (`sonic-cpp: Document [no UTF-8] 380.1us`): + +| level | meaning | +|---|---| +| `full` | rejects all four probes | +| `no UTF-8` | rejects the structural probes, accepts the `0xFF` byte | +| `partial` | accepts the truncated input, the trailing garbage or the stray comma, or crashes on any probe | +| `n/a` | `write`: there is no input to validate (counts as `full`) | + +What a variant accepts is printed as `level: | | | `. A variant's level in +the summary is the worst it got for any file. UTF-8 validation is enabled where a library has a switch (RapidJSON +`kParseValidateEncodingFlag`; the `(no encoding check)` variants leave it off). sonic-cpp 1.0.2 cannot validate +UTF-8 at all; serde_json does not validate UTF-8 in the parts it skips (`IgnoredAny`, unknown struct fields) unless +the input is checked with `std::str::from_utf8` first (the `from_utf8 + ...` variants). + +The sum and select reference values are printed as `check ... reference:` lines; `summarize.py` warns if the C++ and +Rust logs disagree. + +The four probes do not cover everything a parser can get wrong. `--conformance ` runs every `validate` variant +on every file of [JSONTestSuite](https://github.com/nst/JSONTestSuite)'s `test_parsing` (json_test_data has it as +`nst_json_testsuite2/test_parsing`) and prints `conformance: | | accepted|rejected|crashed`; a `y_` +file must be accepted, an `n_` file rejected, and an `i_` file may go either way. bench_all runs each call in a child +process (a call that hangs for 60 s counts as crashed); a stack overflow aborts bench_rs, so `conformance-rs.sh` +runs it one file per process and, for a file that aborts, one variant per process (`CONF_VARIANT`). The trailing +garbage probe was added after this check: Glaze reads anything after the value unless `validate_trailing_whitespace` +is set. + +### Variants + +Level on the Mac in brackets where it is not `full` (`P` = partial, `U` = no UTF-8); every `write` variant is `n/a`. + +| library | validate | sum | select | edit | minify | write | +|---|---|---|---|---|---|---| +| nlohmann json_document | `accept`, `parse`, `read (reused)` | `parse`, `parse_copy`, `read (reused)` | `parse`, `parse_copy`, `structs (from_json)`, `read (reused)` | `editable`, `editable (source numbers)` (`json_editable_document`: set/erase, `dump` with `number_format::source`) | `parse + dump`, `parse_copy + dump`, `parse + dump (source numbers)`, `read + dump (reused)` | `dump`, `dump (source numbers)` | +| nlohmann json | `accept`, `parse` | `parse`, `sax` | `parse`, `structs (from_json)` | `parse`, `ordered_json` | `parse + dump` | `dump` | +| yyjson | `read`, `insitu (copy)`, `insitu (copy untimed)`, `read (raw numbers)`, `read (reused allocator)` | `read`, `insitu (copy)`, `insitu (copy untimed)`, `read (reused allocator)` | `read`, `insitu (copy)`, `insitu (copy untimed)`, `read (raw numbers)`, `read (reused allocator)` | `mut copy`, `insitu (copy) + mut copy` (`yyjson_doc_mut_copy`), `insitu (copy untimed) + mut copy` | `read + write`, `insitu (copy) + write`, `insitu (copy untimed) + write`, `read (raw numbers) + write`, `read + write (reused allocator)` | `write` | +| simdjson | `DOM`, `DOM (reused)` | `DOM`, `DOM (reused)`, `On-Demand`, `On-Demand (reused)` | `DOM`, `DOM (reused)`, `On-Demand` [P], `On-Demand (reused)` [P], `On-Demand structs` [P], `On-Demand (key selectors)` [P] | n/a (no mutable document) | `DOM + to_string`, `DOM (reused) + to_string`, `minify` [P] | `to_string` | +| RapidJSON | `SAX` (null handler), `Document`, `insitu (copy)`, `insitu (copy untimed)`, `SAX (string stream)`, `SAX (default precision)`, `SAX (string stream, default precision)`, `SAX (raw numbers)`, `Document (reused allocator)` | `Document`, `SAX`, `insitu (copy)`, `insitu (copy untimed)`, `SAX (string stream)`, `Document (reused allocator)` | `Document`, `insitu (copy)`, `insitu (copy untimed)`, `Document (string stream)`, `Document (raw numbers)`, `Document (reused allocator)` | `Document`, `insitu (copy)`, `insitu (copy untimed)`, `Document (string stream)` | `Document + Writer`, `SAX to Writer`, `SAX to Writer (string stream)`, `SAX to Writer (raw numbers)`, `Document + Writer (reused allocator)` | `Writer` | +| RapidJSON, `(no encoding check)` | the same [U] | the same [U] | the same [U] | the same [U] | the same [U] | | +| sonic-cpp | `Document` [U] | `Document` [U] | `Document` [U] | `Document` [U] | `Document + Serialize` [U] | `Serialize` | +| Glaze | `validate_json`, `generic` [P], `generic (double)` [P], `generic (strict)`, `generic (double, strict)` | `generic` [P], `generic (double)` [P], `generic (strict)`, `generic (double, strict)`, `lazy_json` [P], `lazy_json (string_view)` (x) | `structs` [P], `structs (validate_skipped)`, `generic` [P], `generic (double)` [P], `generic (strict)`, `generic (double, strict)`, `lazy_json` [P], `lazy_json (string_view)` (x) | `generic` [P], `generic (double)` (x), `generic (strict)`, `generic (double, strict)` (x) | `generic` [P], `generic (double)` (x), `generic (strict)`, `generic (double, strict)` (x), `minify_json` [P] | `generic`, `generic (double)` (x), `generic (strict)`, `generic (double, strict)` (x) | +| Boost.JSON | `SAX` (`basic_parser`), `parse`, `SAX (numbers: none)`, `parse (numbers: none)`, `SAX (reused)`, `parser (reused)` | `parse`, `SAX`, `SAX (reused)`, `parser (reused)` | `parse`, `parse (numbers: none)` (x), `parser (reused)`, `parse_into structs` | `parse` | `parse + serialize`, `parser (reused) + serialize` | `serialize` | +| serde_json | `IgnoredAny` [U], `from_utf8 + IgnoredAny`, `Value` | `visitor`, `Value` | `structs` [U], `from_utf8 + structs`, `Value` | `Value` | `Value` | `Value` | +| sonic-rs | `IgnoredAny`, `Value` | `visitor`, `Value` | `structs`, `Value` | `Value` | `Value` | `Value` | +| simd-json | `tape (copy)`, `borrowed (copy)`, `tape (reused)` | `visitor (copy)`, `borrowed (copy)`, `borrowed (reused)` | `structs (copy)`, `borrowed (copy)` | `owned (copy)`, `borrowed (copy)` | `borrowed (copy)` | `borrowed` | + +(x): excluded for a wrong result on some file, and so in the summary for every file: `generic (double)` loses the +64-bit ids of `twitter.json` when it writes them; `lazy_json (string_view)` reads the raw bytes of a string, so escaped +strings have the wrong length (`sum`, and the `"` in 19,077 `jeopardy.json` categories in `select`); +`numbers: none` reads every number as 0. + +`structs` read into types that declare only the fields `select` uses and hold the same data: nlohmann/json's +`from_json()` of the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` macro (from a `json` value or from a `json_document`'s view) +reads into `nsel`, where the arrays and objects that are only counted (`seatCategories`, the values of `events`, +`coordinates`) are a `count_only` holding their size. Glaze reads into the same types (reflected; `count_only` has a +reader that skips and counts the elements; `error_on_unknown_keys = false`, and with `validate_skipped` to validate +what it skips), and so does simdjson On-Demand (`get()` with `tag_invoke`, fields in document order, +`count_elements()`/`count_fields()`). serde derive reads into the same fields with a `Count` that counts with +`IgnoredAny` (and a `BTreeMap`, as `std::map`). Boost.JSON's `parse_into` has no type that skips any value, so its +counted members only count what it converts into them: `seatCategories` into a counting sequence of an empty described +struct, `coordinates` into three levels of counting sequences down to `double`, and the `events` values into an empty +described struct, so their members are not counted. `key selectors` are simdjson 5.0's `object::for_each<"k1", +...>`, which walks each object once and matches keys with a compile-time perfect hash. `visitor` is a serde +`DeserializeSeed` that sums without building a value; `SAX` and `sax` are the libraries' event interfaces with a +summing (or, for `validate`, an empty) handler. RapidJSON parses with `kParseFullPrecisionFlag` (correctly rounded +floats; without it, sums and written floats are wrong) and Boost.JSON with `number_precision::precise`, as every other +library rounds correctly by default; only `validate`, which reads no number, also has RapidJSON's `(default +precision)`. RapidJSON's `Document::Parse(data, size)` and our `SAX` read through `EncodedInputStream`; +`(string stream)` reads the NUL-terminated string through `StringStream`, as `Document::Parse(const char*)` does, +where RapidJSON has a SIMD string scanner (used only without `kParseValidateEncodingFlag`). + +Variants named `(raw numbers)` or `(numbers: none)` use a library's mode that validates numbers without converting +them (yyjson `YYJSON_READ_NUMBER_AS_RAW`, RapidJSON `kParseNumbersAsStringsFlag`, Boost.JSON +`number_precision::none`), as `json_document` converts a number only when it is read. In `select` they convert the +selected numbers themselves (`std::from_chars`); Boost.JSON's `none` leaves no number text in its DOM, so it cannot. +yyjson writes a raw number verbatim, so `read (raw numbers) + write` is exact. sonic-cpp 1.0.2 has no parse flags, +and Glaze's generic DOM has no raw number mode (`validate_json` converts no number anyway). `(reused allocator)`: +yyjson's `yyjson_alc_dyn_new()`, RapidJSON's `MemoryPoolAllocator`s over user buffers for the values and the parse +stack; Boost.JSON's `parser (reused)` builds its value in a `monotonic_resource` over a buffer kept across calls. These +buffers grow after a call that needed more, so the timed calls do not allocate. `generic (double)` is `glz::generic`, +which stores every number as a double. The Glaze `(strict)` variants read with `validate_trailing_whitespace` (else +Glaze accepts anything after the value) and write with `escape_control_characters` (else Glaze writes a string's +control characters, e.g. U+0001, unescaped, which is not JSON; `gsoc-2018.json` has some). + +| library | version | notes | +|---|---|---| +| `json_document`, `json` | this checkout | | +| yyjson | 0.13.0 | | +| simdjson | 5.1.1 | the single-header files of the tag | +| sonic-cpp | 1.0.2 | | +| RapidJSON | master 24b5e7a8b27f (2025-02-05) | | +| Glaze | 9.1.0 | `generic_u64` and `generic` (owning DOMs, member order kept) | +| Boost.JSON | 1.92.0 | monotonic resource | +| sonic-rs, simd-json, serde_json | see `rust/Cargo.lock` | serde_json with `float_roundtrip` | + +SHA-256 of the downloads: + +``` +55f8a675397c505f9bee6c160e1c26b0085868f185d04d7a7727531fdbff4bd4 glaze-v9.1.0.tar.gz +30edf9e47c417f653546c39295fdb66ba5f89fb37eb3780122c6ee66605e5837 sonic-cpp v1.0.2.tar.gz +2d2601a82d2d3b7e143a3c8d43ef616671391034bc46891a9816b79cf2d3e7a8 rapidjson 24b5e7a8b27f42fa16b96fc70aade9106cf7102f.tar.gz +34e0f62a2bc11ab20d601e8ca1cc2b2079503aa45119a19133d89d19b94a0fae yyjson 0.13.0.tar.gz +f3e5ee5f39051960b5ce65762ee4b6919caf270675eb52240ebd92f21a5bcefd simdjson v5.1.1 singleheader/simdjson.h +3ea5f501cef6c2e16e28095b566feeb56021ca473aaf50aad32102f45d734195 simdjson v5.1.1 singleheader/simdjson.cpp +c4a3b310ddd2472416e091067166b0713be97c63f38c212c484ada022fd296ce boost_1_92_0.tar.gz +``` + +### Timing + +Every variant of a use case runs interleaved in every round, each timed call after an untimed one, and the best +round is reported (the method of `bench_view.cpp`). The order of the variants changes in every round (a shuffle with a +fixed seed; the first round keeps the listed order): on the Mac, a variant's time can depend on which variant ran +before it, by up to 15 %, and a fixed order would give each variant the same neighbour in every round. `jeopardy.json` (50 MB) gets a fifth of the rounds (at least 3, +at most the given number). + +## Building and running + +All libraries except yyjson and simdjson are used header-only. With the downloads unpacked into `DL` +(`compare.py --download` fetches yyjson and Boost into its build directory, and simdjson 4.6.11, so take simdjson +5.1.1's `singleheader` files from its tag): + +```sh +cc -O3 -DNDEBUG -c $DL/yyjson-0.13.0/src/yyjson.c -o yyjson.o +c++ -std=c++17 -O3 -DNDEBUG -c $DL/simdjson-5.1.1/singleheader/simdjson.cpp -o simdjson.o +c++ -std=c++23 -O3 -DNDEBUG -DRAPIDJSON_NEON \ + -I ../../../../include -I $DL/yyjson-0.13.0/src -I $DL/simdjson-5.1.1/singleheader -I $DL/boost_1_92_0 \ + -I $DL/glaze-9.1.0/include -I $DL/rapidjson/include -I $DL/sonic/include \ + bench_all.cpp yyjson.o simdjson.o -o bench_all +./bench_all 30 > mac-cpp-1.log + +cd rust && cargo build --release --locked && ./target/release/bench_rs 30 > ../mac-rs-1.log + +python3 summarize.py mac-cpp-*.log --rust mac-rs-*.log --json mac.json +``` + +With GCC 16 and Homebrew Clang on macOS, build the three steps with the same flags plus +`--sysroot=$(xcrun --show-sdk-path)` (`gcc-16`, `g++-16`) or `-isysroot $(xcrun --show-sdk-path)` +(`/opt/homebrew/opt/llvm/bin/clang`, `clang++`). The key selectors and simdjson's `tag_invoke` need C++20, so +`bench_all.cpp` needs `-std=c++20` or newer. + +Both programs take ` [rounds] [file] [use case]`: `./bench_all 30 canada edit` times +only the edit of `canada.json`; `""` stands for all files; the file names are `twitter`, `citm_catalog`, `canada`, +`jeopardy`, `status`, `twitter_min` and `citm_catalog_min`. The checks cover only the selected files and use cases. +bench_all uses `fork()` for the probes and the crash check (macOS, Linux). + +`--files [rounds] [file] [use case]` runs `validate`, `sum`, `minify` and `write` (`select` and `edit` are +defined only for the files above) on every `*.json` file of a directory, named by their stem; files under 500 KB are +timed in batches of about 500 KB of input. It is meant for files the libraries were not tuned on, such as the +`jsonexamples` of [simdjson-data](https://github.com/simdjson/simdjson-data) without `twitter.json`, +`citm_catalog.json` and `canada.json`. `summarize.py` takes such logs as well. + +On x86-64, use `-march=haswell -DRAPIDJSON_SSE42` instead of `-DRAPIDJSON_NEON` (sonic-cpp needs AVX2), pin the +process to one core, and time one file per process. Glaze 9 needs `std::expected`, which Clang 18 and older cannot +use from GCC 13's standard library (Clang 19 and newer can); `-DBENCH_NO_GLAZE=1` builds without it. For Rust, build +with `RUSTFLAGS="-C target-cpu=haswell"` to match `-march=haswell`. + +## Reading the results + +A log line holds the file, the use case, and one cell per variant: `| : []