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 <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann committed 2026-10-30 15:29:52 +01:00
1 parent ff2b8ffdac
commit 9abc88f9cc
10 files changed
+34070 -8615

No files matched your search

@@ -23,8 +23,8 @@ that in debug builds, and a quarter to four fifths of it in optimized builds ([T
This post is about *how*. None of the techniques is new: almost every one of them is borrowed 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), [SQLite](https://sqlite.org),
[Boost.JSON](https://github.com/boostorg/json) or a textbook, and we name the source at each step. What we think is
[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 we think is
worth writing about is the combination, and the conditions it had to work under: a C++11 header-only library with a
value type that is a template over its string, number, object and allocator types; input from strings, streams,
`FILE*`, iterator pairs, wide strings and user-defined adapters; output that had to stay the same byte for byte; and
@@ -322,7 +322,7 @@ The same kind of word test now runs in several places:
### 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 details are worth stealing. A signed comparison
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, after
@@ -372,7 +372,7 @@ per string and `jeopardy.json` 14. For them, setting up a scan costs more than t
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:
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
@@ -1137,6 +1137,10 @@ Which approach wins depends on the task, and a comparison of "parse" times acros
different amounts of work. 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.
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. To check
ourselves, we also ran files and a conformance suite we never tuned on ([below](#files-and-checks-we-didnt-choose)).
### 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
@@ -1182,8 +1186,8 @@ lazy reader such as simdjson's On-Demand API or Glaze's `lazy_json` only looks a
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 three broken inputs: the file cut
short by one byte, a stray comma, and an invalid UTF-8 byte in a string. A way that rejects all three validates fully,
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. If a way that checks less is faster, it is shown in the right half of the
cell: "U" trusts UTF-8, "P" reads lazily or only removes whitespace.
@@ -1191,7 +1195,7 @@ cell: "U" trusts UTF-8, "P" reads lazily or only removes whitespace.
--8<-- "images/perf_blog_usecases_mac.svg"
</div>
<p class="nj-caption" markdown>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`, relative to the fastest library, so that every file counts equally. Less is better. Where a way that checks less is at least 3 % faster, it is shown in the right half of the cell: "U" trusts UTF-8, "P" reads lazily or only removes whitespace. "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).</p>
<p class="nj-caption" markdown>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`, relative to the fastest library, so that every file counts equally. Less is better. Where a way that checks less is at least 3 % faster, it is shown in the right half of the cell: "U" trusts UTF-8, "P" reads lazily or only removes whitespace. "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.</p>
### Results on the Mac
@@ -1205,32 +1209,41 @@ Some caveats belong next to that:
and *select*. Most of the lead comes from the indentation of `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 the others convert 111,080 floats nobody looks at. *sum* reads every number, so it is the fair comparison for
floats; there, `json_document` is still slightly ahead of yyjson.
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 half the time. *sum* reads every number, so it
is the fair comparison for floats; there, `json_document` is still slightly ahead of yyjson. Deferring integers
too saved `json_document` another 2 % on the Mac and 5 to 6 % on x86-64 in an experiment; that is not in 3.13.0.
- **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 of `json_document`'s time, and in 0.53 to 0.58 on x86-64: the right
halves of the *select* column.
- **Indentation.** Two of the four files are indented, which theme <a class="nj-theme" href="#theme-2" title="theme 2">2</a> helps. On minified copies of
`twitter.json` and `citm_catalog.json`, yyjson comes closer (*validate* 1.15 → 1.08, *sum* 1.10 → 1.03), but
`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 RapidJSON can read numbers as strings and write them back unchanged. That would make
writing `canada.json` with `json_document` four times as fast. The figures use neither: every library formats the
numbers it converted.
- **Small documents.** On a 2.5 KB message, the fastest libraries take about a microsecond on the Mac and 1.5 to 2
on x86-64. yyjson validates and sums
it slightly faster than `json_document` on the Mac, and yyjson and simdjson sum it slightly faster with GCC on
x86-64.
on x86-64. yyjson validates it as fast as `json_document` and sums it slightly faster on the Mac, and yyjson and
simdjson sum it slightly faster with GCC on x86-64.
### Reading into structs
A view converts 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 a quarter longer. On the Mac, Glaze and serde_json, reading into
the same structs and checking everything, take 1.7 and 2.2 times as long (geometric mean over the four files). On a `json` value, `from_json()` costs about what
for the many small records of `jeopardy.json` does it take about a fifth 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.3 and 3.1 times as long
(geometric mean over the four files). On a `json` value, `from_json()` costs about what
`json::parse()` costs.
### 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, [`json::accept()`](../../api/basic_json/accept.md) and a SAX handler are on par with Boost.JSON (on x86-64,
Boost.JSON is 20 to 35 % faster there), and `dump()` writes faster than Boost.JSON, RapidJSON, Glaze and
serde_json.
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 13 % longer than Boost.JSON without number conversion (on
x86-64, Boost.JSON validates in 0.57 to 0.59 and sums in 0.75 of the time). `dump()` writes faster than Boost.JSON,
RapidJSON and serde_json, and about as fast as Glaze.
### Results on x86-64
@@ -1246,27 +1259,48 @@ only about *sum*.
<p class="nj-caption" markdown>The same comparison on an x86-64 Haswell 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).</p>
`json_document` is the fastest in five of the six columns with GCC and in all six with Clang. Behind those means, it
loses on single files:
`json_document` is the fastest in five of the six columns with GCC and in all six with Clang, where its lead in
*sum* (4 %) is within the noise of this machine. 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.85 to 0.91 of `json_document`'s time with GCC 16. 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, and simdjson is about as fast.
`citm_catalog.json` and `canada.json` in 0.87 to 0.91 of `json_document`'s time with GCC 16 (0.81 to 0.88 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 half as long as `json_document`'s parse. Boost.JSON's SAX parser and sonic-rs, which build nothing,
validate and sum it in 0.63 to 0.77 of the time, and serde_json validates it in 0.85. Reusing the document cuts
`json_document`'s time by 40 to 47 %, and its `read()` then validates `jeopardy.json` faster than any of them. On the Mac, a
fresh document costs hardly more than a reused one.
- **Writing floats.** yyjson writes `canada.json` in 0.86 (GCC 16) to 0.93 (Clang) of the time, because
validate and sum it in 0.64 to 0.76 of the time, serde_json validates it in 0.79 to 0.82 and Glaze in 0.87 to 0.99.
Reusing the document cuts `json_document`'s time by 43 to 46 %, to 45 to 47 ms, and then no library validates
`jeopardy.json` faster, even reused: the next is simdjson's reused parser at 50 to 53 ms. On the Mac, a fresh
document costs hardly more than a reused one.
- **Writing floats.** yyjson writes `canada.json` in 0.88 (GCC 16) to 0.92 (Clang) of the time, because
`json_document` first converts most floats from their text. Writing the source text instead
(`number_format::source`) avoids that.
- **Within a few percent.** With GCC, simdjson's DOM validates or selects from `twitter.json` and
`citm_catalog.json` 1 to 4 % faster in some of the combinations.
- **simdjson's DOM, with GCC.** It validates `twitter.json` and `citm_catalog.json` 3 to 8 % faster, and selects
from `citm_catalog.json` 6 to 9 % faster; with Clang, the two are even. On minified copies of the two files,
`json_document` is ahead again.
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.83 to 0.85 of its time. File by file, it is less
clear-cut: on x86-64, `json_document` validates only 4 to 8 of the 19 files fastest (13 on the Mac). simdjson wins 5
to 8 of the others, and Boost.JSON, without number conversion, validates the number-heavy `mesh.pretty`, `numbers`
and `marine_ik` up to 1.5 times as fast. We know two causes, but so far each fix slowed down other files.
Every *validate* way also ran the 318 files of [JSONTestSuite](https://github.com/nst/JSONTestSuite). The fully
validating ways pass, with a few exceptions listed in [Appendix E](#e-comparison-with-other-libraries), one of them
ours: nlohmann/json accepts `123` followed by a NUL byte, which it treats as the end of the input. The suite also
showed that Glaze's generic reader accepts garbage after the value by default, which our probes had missed; the
figures use its strict option.
We did not measure memory use, a CPU with AVX-512, MSVC, writing from structs, streaming input, or link-time
optimization.
## What didn't work
The pull requests record the ideas that measured worse, which is as useful as the ones that made it:
@@ -1702,34 +1736,50 @@ one binary with six code layouts: they were equal within 0.2 %.
[`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)
4.6.11, [sonic-cpp](https://github.com/bytedance/sonic-cpp) 1.0.2, [RapidJSON](https://github.com/Tencent/rapidjson)
(master, 24b5e7a), [Glaze](https://github.com/stephenberry/glaze) 9.0.0, [Boost.JSON](https://github.com/boostorg/json)
5.0.8, [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 (Ubuntu 24.04's
default) and Clang 23 with `-march=haswell`, pinned to one core; Rust 1.99 with `-C target-cpu=haswell` on x86-64. Every
variant runs in every round, interleaved, 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`, serde_json `float_roundtrip`: every library has to convert every number exactly.
variant runs in every round, in a new random order each round, 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`, serde_json `float_roundtrip`: every number a library converts has to be exact.
That rule, like the others here, is our choice.
**Validation levels.** A way validates fully if it rejects all three broken inputs (cut short by one byte, a
stray comma, an invalid UTF-8 byte in a string); "U" accepts the invalid UTF-8 byte; "P" accepts one of the other
two. These three probes are not a conformance suite; they separate the ways that check everything from those that
check less. sonic-cpp 1.0.2 does not check UTF-8. RapidJSON does only with `kParseValidateEncodingFlag`, and
**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, and Glaze's structs only with
`validate_skipped`.
`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). 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; for `json`,
[`JSON_STRICT_NUL_HANDLING`](../../api/macros/json_strict_nul_handling.md) changes that), 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
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.
**Choices.** A library's time is its fastest fully validating way per file; "(U …)" and "(P …)" give a faster
way that checks 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 (simdjson's parsers,
`json_document::read()`) are measured but not chosen. Neither are variants that copy each number's text instead of
formatting it (`json_document` with `number_format::source`, RapidJSON with `kParseNumbersAsStringsFlag`); they matter
only for `canada.json` (`json_document`'s *write*: 398 µs instead of 1,621 µs on the Mac). nlohmann/json's struct
variants use the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` macro, Glaze's and serde's their reflection and `derive`; all
three declare the same fields.
such mean in its column. Variants that keep a parser or document across calls are measured but not chosen; 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 are not
(`json_document` with `number_format::source`, yyjson's and RapidJSON's raw numbers); they matter only for
`canada.json` (`json_document`'s *write*: 398 µs instead of 1,617 µs on the Mac). 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.
<div class="nj-fig-wrap" markdown>
--8<-- "images/perf_blog_usecases_x86-clang.svg"
@@ -1749,96 +1799,96 @@ three declare the same fields.
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | accept, parse | 176 | 359 | 943 | 22,862 | 1.0 |
| yyjson | insitu (copy), read | 180 | 473 | 1,493 | 30,542 | 0.9 |
| simdjson | DOM | 221 | 493 | 2,104 | 27,311 | 1.1 |
| sonic-rs (Rust) | Value | 329 | 684 | 1,930 | 32,169 | 1.4 |
| Glaze | validate_json | 329 | 853 | 1,302 | 46,471 | 1.4 |
| simd-json (Rust) | tape (copy) | 304 | 709 | 2,286 | 39,592 | 1.7 |
| sonic-cpp | Document [U] | – (U 380) | – (U 982) | – (U 2,577) | – (U 41,571) | – (U 1.6) |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 457 (U 354) | 1,105 (U 1,052) | 1,532 (U 1,459) | 47,547 (U 44,881) | 2.0 (U 1.7) |
| nlohmann/json `json` | accept | 481 | 897 | 2,463 | 63,383 | 2.4 |
| Boost.JSON | SAX | 536 | 1,017 | 3,065 | 55,102 | 2.3 |
| RapidJSON | SAX, insitu (copy), insitu (copy) (no encoding check) [U] | 1,314 (U 704) | 1,568 (U 1,150) | 6,871 | 142,654 (U 65,584) | 6.1 (U 2.6) |
| **nlohmann/json `json_document`** | accept, parse | 176 | 360 | 959 | 22,553 | 0.9 |
| yyjson | insitu (copy), read | 178 | 471 | 1,486 | 30,278 | 0.9 |
| simdjson | DOM | 199 | 448 | 1,885 | 28,368 | 1.0 |
| sonic-rs (Rust) | Value | 326 | 681 | 1,939 | 31,450 | 1.4 |
| Glaze | validate_json | 329 | 854 | 1,302 | 44,972 | 1.4 |
| simd-json (Rust) | tape (copy) | 289 | 698 | 2,278 | 38,874 | 1.7 |
| sonic-cpp | Document [U] | – (U 379) | – (U 982) | – (U 2,575) | – (U 40,691) | – (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) | 530 | 991 | 1,466 | 53,807 | 2.3 |
| nlohmann/json `json` | accept | 471 | 907 | 2,510 | 62,074 | 2.4 |
| RapidJSON | SAX, insitu (copy), insitu (copy) (no encoding check) [U] | 1,311 (U 695) | 1,568 (U 1,145) | 6,787 | 139,323 (U 63,152) | 6.1 (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 | 226 | 480 | 1,804 | 29,208 | 1.2 |
| yyjson | insitu (copy), read | 229 | 573 | 1,937 | 37,916 | 1.1 |
| simdjson | DOM, On-Demand | 256 | 608 | 2,594 | 33,706 | 1.3 |
| sonic-rs (Rust) | visitor | 372 | 778 | 2,695 | 41,462 | 1.6 |
| simd-json (Rust) | visitor (copy) | 372 | 866 | 2,727 | 48,506 | 2.0 |
| sonic-cpp | Document [U] | – (U 427) | – (U 1,091) | – (U 2,976) | – (U 48,840) | – (U 1.9) |
| nlohmann/json `json` | sax | 461 | 928 | 3,100 | 63,272 | 2.5 |
| Boost.JSON | SAX | 537 | 1,020 | 3,046 | 54,818 | 2.3 |
| serde_json (Rust) | visitor | 665 | 1,229 | 4,813 | 66,093 | 2.5 |
| RapidJSON | SAX, insitu (copy), insitu (copy) (no encoding check) [U] | 1,331 (U 755) | 1,626 (U 1,258) | 6,924 | 149,474 (U 72,381) | 6.1 (U 2.9) |
| Glaze | generic, lazy_json [P] | 1,323 | 2,845 | 9,777 | 151,441 | 6.7 (P 3.5) |
| **nlohmann/json `json_document`** | parse | 225 | 482 | 1,818 | 28,721 | 1.2 |
| yyjson | insitu (copy), read | 230 | 570 | 1,931 | 37,534 | 1.1 |
| simdjson | DOM, On-Demand | 239 | 570 | 2,372 | 34,562 | 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,083) | – (U 2,956) | – (U 48,064) | – (U 1.9) |
| Boost.JSON | SAX | 533 | 1,005 | 3,029 | 53,595 | 2.3 |
| nlohmann/json `json` | sax | 461 | 930 | 3,127 | 62,756 | 2.5 |
| serde_json (Rust) | visitor | 652 | 1,242 | 4,772 | 66,568 | 2.5 |
| Glaze | generic (double) [P], generic (double, strict), lazy_json [P] | 977 | 2,068 | 6,254 | 98,851 | 4.8 (P 3.5) |
| RapidJSON | SAX, insitu (copy), insitu (copy) (no encoding check) [U] | 1,311 (U 742) | 1,623 (U 1,256) | 6,913 | 145,744 (U 70,079) | 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, structs (from_json) | 187 | 367 | 987 | 24,409 | 1.0 |
| yyjson | insitu (copy), read | 188 | 481 | 1,493 | 33,546 | 1.1 |
| simdjson | DOM, On-Demand [P] | 231 (P 144) | 510 | 2,104 (P 646) | 32,075 (P 18,601) | 1.2 (P 0.8) |
| Glaze | structs (validate_skipped), structs [P] | 312 (P 238) | 873 (P 252) | 1,304 (P 316) | 51,046 (P 41,037) | 1.4 (P 1.1) |
| sonic-rs (Rust) | Value | 340 | 700 | 1,938 | 41,203 | 1.6 |
| sonic-cpp | Document [U] | – (U 385) | – (U 992) | – (U 2,590) | – (U 46,922) | – (U 1.7) |
| simd-json (Rust) | structs (copy) | 375 | 871 | 2,660 | 57,877 | 2.0 |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 483 (U 416) | 1,121 (U 1,082) | 1,532 (U 1,458) | 63,635 | 2.2 (U 1.9) |
| Boost.JSON | parse | 889 | 1,490 | 3,632 | 96,757 | 3.8 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,319 (U 703) | 1,572 (U 1,146) | 6,762 | 142,740 (U 66,763) | 6.4 (U 2.7) |
| nlohmann/json `json` | parse, structs (from_json) | 1,357 | 2,439 | 6,066 | 179,366 | 7.5 |
| **nlohmann/json `json_document`** | parse | 181 | 363 | 959 | 24,308 | 1.0 |
| yyjson | insitu (copy), read, read (raw numbers) | 188 | 476 | 1,488 | 32,182 | 1.1 |
| simdjson | DOM, On-Demand (key selectors) [P], On-Demand [P], On-Demand structs [P] | 197 (P 126) | 447 (P 352) | 1,882 (P 564) | 30,173 (P 19,313) | 1.1 (P 0.7) |
| Glaze | structs (validate_skipped), structs [P] | 311 (P 239) | 848 (P 253) | 1,302 (P 310) | 45,909 (P 36,348) | 1.4 (P 1.2) |
| sonic-rs (Rust) | Value | 333 | 691 | 1,936 | 40,660 | 1.7 |
| sonic-cpp | Document [U] | – (U 384) | – (U 989) | – (U 2,580) | – (U 45,320) | – (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 | 620 | 1,206 | 3,619 | 66,538 | 2.7 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,314 (U 697) | 1,574 (U 1,148) | 6,750 | 141,640 (U 65,799) | 6.4 (U 2.6) |
| nlohmann/json `json` | parse, structs (from_json) | 1,368 | 2,435 | 5,915 | 180,551 | 7.5 |
**edit**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | editable | 290 | 560 | 2,742 | 58,265 | 1.9 |
| yyjson | insitu (copy) + mut copy, mut copy | 438 | 900 | 3,694 | 84,447 | 2.4 |
| sonic-cpp | Document [U] | – (U 490) | – (U 1,227) | – (U 5,655) | – (U 63,940) | – (U 2.6) |
| sonic-rs (Rust) | Value | 634 | 1,264 | 4,379 | 140,693 | 3.8 |
| simd-json (Rust) | borrowed (copy) | 934 | 2,111 | 7,695 | 111,832 | 5.3 |
| Boost.JSON | parse | 1,367 | 1,999 | 6,542 | 157,555 | 6.6 |
| nlohmann/json `json` | ordered_json, parse | 1,269 | 2,376 | 8,194 | 173,089 | 7.1 |
| Glaze | generic | 1,503 | 3,223 | 11,125 | 187,294 | 8.2 |
| RapidJSON | Document, insitu (copy), insitu (copy) (no encoding check) [U] | 1,917 (U 1,349) | 2,404 (U 1,987) | 13,880 | 224,650 (U 148,239) | 10.3 (U 6.5) |
| serde_json (Rust) | Value | 2,001 | 3,287 | 9,670 | 248,681 | 9.3 |
| **nlohmann/json `json_document`** | editable | 283 | 557 | 2,747 | 57,355 | 1.9 |
| yyjson | insitu (copy) + mut copy, mut copy | 438 | 897 | 3,681 | 83,160 | 2.4 |
| sonic-cpp | Document [U] | – (U 481) | – (U 1,220) | – (U 5,623) | – (U 62,390) | – (U 2.5) |
| 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,363 | 1,995 | 6,500 | 154,406 | 6.5 |
| nlohmann/json `json` | ordered_json, parse | 1,270 | 2,337 | 8,183 | 173,044 | 7.0 |
| Glaze | generic (strict), generic [P] | 1,526 | 3,206 | 10,930 | 177,272 | 8.2 |
| RapidJSON | Document, insitu (copy), insitu (copy) (no encoding check) [U] | 1,914 (U 1,350) | 2,399 (U 1,974) | 13,711 | 220,629 (U 144,275) | 10.2 (U 6.4) |
| 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 | 264 | 496 | 2,566 | 37,936 | 1.5 |
| yyjson | insitu (copy) + write, read + write | 289 | 640 | 3,213 | 50,740 | 1.6 |
| sonic-rs (Rust) | Value | 546 | 1,139 | 4,366 | 64,830 | 2.9 |
| sonic-cpp | Document + Serialize [U] | – (U 497) | – (U 1,219) | – (U 5,658) | – (U 61,948) | – (U 2.5) |
| simdjson | DOM + to_string, minify [P] | 590 (P 65.0) | 990 (P 178) | 8,949 (P 236) | 82,232 (P 5,929) | 3.7 (P 0.3) |
| simd-json (Rust) | borrowed (copy) | 959 | 2,097 | 7,743 | 107,444 | 5.4 |
| Boost.JSON | parse + serialize | 1,391 | 1,987 | 6,586 | 154,714 | 6.8 |
| RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U] | 1,497 (U 1,310) | 1,797 (U 1,699) | 14,455 | 181,502 (U 167,920) | 8.0 (U 7.3) |
| nlohmann/json `json` | parse + dump | 1,592 | 2,694 | 8,280 | 200,923 | 8.5 |
| Glaze | generic, minify_json [P] | 1,488 (P 283) | 3,208 (P 740) | 11,076 (P 1,808) | 172,917 (P 39,976) | 7.8 (P 1.3) |
| serde_json (Rust) | Value | 1,999 | 3,240 | 9,748 | 227,301 | 9.2 |
| **nlohmann/json `json_document`** | parse + dump | 254 | 492 | 2,578 | 37,096 | 1.4 |
| yyjson | insitu (copy) + write, read + write | 289 | 635 | 3,209 | 50,039 | 1.6 |
| sonic-rs (Rust) | Value | 535 | 1,134 | 4,377 | 64,832 | 3.0 |
| sonic-cpp | Document + Serialize [U] | – (U 495) | – (U 1,218) | – (U 5,628) | – (U 60,548) | – (U 2.5) |
| simdjson | DOM + to_string, minify [P] | 567 (P 61.3) | 920 (P 168) | 5,026 (P 228) | 81,800 (P 5,682) | 3.6 (P 0.3) |
| simd-json (Rust) | borrowed (copy) | 952 | 2,111 | 7,658 | 108,130 | 5.5 |
| Boost.JSON | parse + serialize | 1,378 | 1,984 | 6,505 | 151,127 | 6.7 |
| RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U] | 1,499 (U 1,300) | 1,797 (U 1,697) | 14,205 | 180,015 (U 164,086) | 8.0 (U 7.3) |
| nlohmann/json `json` | parse + dump | 1,599 | 2,716 | 8,185 | 201,407 | 8.7 |
| Glaze | generic (strict), minify_json [P] | 1,501 (P 279) | 3,179 (P 726) | 10,937 (P 1,705) | 168,733 (P 39,268) | 7.9 (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 | 75.2 | 136 | 1,621 | 14,846 | 0.5 |
| yyjson | write | 104 | 164 | 1,717 | 20,119 | 0.7 |
| sonic-cpp | Serialize | 111 | 231 | 3,047 | 20,342 | 0.9 |
| nlohmann/json `json` | dump | 220 | 286 | 2,240 | 30,983 | 1.2 |
| Glaze | generic | 212 | 469 | 1,692 | 34,921 | 1.3 |
| sonic-rs (Rust) | Value | 214 | 454 | 2,414 | 33,358 | 1.4 |
| serde_json (Rust) | Value | 327 | 504 | 2,257 | 49,857 | 2.0 |
| simd-json (Rust) | borrowed | 364 | 496 | 2,723 | 48,114 | 1.8 |
| simdjson | to_string | 352 | 494 | 6,770 | 54,528 | 2.5 |
| Boost.JSON | serialize | 499 | 503 | 2,868 | 62,964 | 2.8 |
| RapidJSON | Writer | 592 | 818 | 6,947 | 81,580 | 3.8 |
| **nlohmann/json `json_document`** | dump | 72.6 | 133 | 1,617 | 14,444 | 0.5 |
| yyjson | write | 100 | 164 | 1,714 | 19,665 | 0.7 |
| sonic-cpp | Serialize | 110 | 232 | 3,038 | 20,165 | 0.8 |
| nlohmann/json `json` | dump | 216 | 287 | 2,235 | 31,197 | 1.2 |
| Glaze | generic | 210 | 469 | 1,696 | 33,710 | 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 |
| simdjson | to_string | 342 | 450 | 3,141 | 52,878 | 2.5 |
| Boost.JSON | serialize | 498 | 501 | 2,876 | 62,385 | 2.8 |
| RapidJSON | Writer | 593 | 818 | 6,872 | 79,758 | 3.9 |
??? info "Times in µs on x86-64 with GCC 16.2"
@@ -1846,96 +1896,96 @@ three declare the same fields.
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | accept, parse | 304 | 733 | 1,682 | 78,594 | 1.5 |
| sonic-rs (Rust) | IgnoredAny | 470 | 966 | 2,249 | 54,246 | 1.8 |
| simdjson | DOM | 302 | 705 | 3,176 | 114,180 | 1.8 |
| sonic-cpp | Document [U] | – (U 405) | – (U 935) | – (U 3,218) | – (U 95,565) | – (U 1.7) |
| yyjson | insitu (copy), read | 394 | 956 | 3,322 | 130,978 | 1.6 |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 634 (U 487) | 1,448 (U 1,370) | 2,402 (U 2,318) | 66,822 (U 59,801) | 2.4 (U 1.9) |
| Glaze | validate_json | 727 | 1,983 | 2,571 | 76,361 | 2.6 |
| Boost.JSON | SAX | 680 | 922 | 5,993 | 60,687 | 2.6 |
| simd-json (Rust) | tape (copy) | 592 | 1,426 | 4,303 | 211,716 | 2.8 |
| nlohmann/json `json` | accept | 817 | 1,614 | 4,402 | 92,387 | 4.1 |
| RapidJSON | SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,250 (U 1,098) | 1,910 (U 1,607) | 10,181 | 150,241 (U 143,546) | 5.3 (U 3.6) |
| **nlohmann/json `json_document`** | accept, parse | 310 | 732 | 1,685 | 80,224 | 1.5 |
| sonic-rs (Rust) | IgnoredAny | 482 | 969 | 2,489 | 55,486 | 1.8 |
| simdjson | DOM | 302 | 676 | 3,234 | 121,861 | 1.8 |
| yyjson | insitu (copy), read (raw numbers) | 397 | 935 | 2,151 | 135,866 | 1.6 |
| sonic-cpp | Document [U] | – (U 404) | – (U 921) | – (U 3,186) | – (U 100,732) | – (U 1.7) |
| Boost.JSON | SAX, SAX (numbers: none) | 680 | 909 | 1,642 | 60,757 | 2.9 |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 622 (U 480) | 1,440 (U 1,371) | 2,621 (U 2,538) | 65,602 (U 60,154) | 2.5 (U 1.9) |
| Glaze | validate_json | 714 | 1,975 | 2,544 | 79,737 | 2.5 |
| simd-json (Rust) | tape (copy) | 563 | 1,403 | 4,630 | 212,467 | 2.9 |
| nlohmann/json `json` | accept | 792 | 1,585 | 4,678 | 98,338 | 3.9 |
| RapidJSON | SAX (no encoding check) [U], SAX (raw numbers), insitu (copy), insitu (copy) (no encoding check) [U] | 1,254 (U 1,092) | 1,885 (U 1,589) | 10,363 | 161,392 (U 155,425) | 5.0 (U 3.5) |
**sum**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| simdjson | On-Demand | 347 | 796 | 3,476 | 92,000 | 1.9 |
| **nlohmann/json `json_document`** | parse | 383 | 932 | 3,874 | 93,197 | 2.0 |
| sonic-rs (Rust) | visitor | 494 | 1,135 | 4,580 | 59,149 | 2.4 |
| sonic-cpp | Document [U] | – (U 462) | – (U 1,125) | – (U 3,867) | – (U 106,727) | – (U 2.1) |
| yyjson | insitu (copy), read | 448 | 1,094 | 3,955 | 136,684 | 1.9 |
| Boost.JSON | SAX | 668 | 934 | 5,692 | 62,486 | 2.7 |
| nlohmann/json `json` | sax | 790 | 1,624 | 5,671 | 93,964 | 3.9 |
| simd-json (Rust) | visitor (copy) | 722 | 1,686 | 5,191 | 220,582 | 3.8 |
| serde_json (Rust) | visitor | 1,318 | 2,299 | 7,610 | 123,810 | 4.3 |
| RapidJSON | SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,296 (U 1,145) | 2,011 (U 1,688) | 10,601 | 170,083 (U 157,809) | 5.3 (U 3.9) |
| Glaze | generic, lazy_json [P] | 2,940 | 5,528 | 17,830 | 390,814 (P 255,217) | 12.6 (P 6.3) |
| simdjson | On-Demand | 348 | 804 | 3,368 | 90,882 | 1.9 |
| **nlohmann/json `json_document`** | parse | 384 | 929 | 3,867 | 89,000 | 2.0 |
| sonic-rs (Rust) | visitor | 503 | 1,123 | 4,418 | 59,993 | 2.8 |
| sonic-cpp | Document [U] | – (U 462) | – (U 1,197) | – (U 3,854) | – (U 109,985) | – (U 2.1) |
| yyjson | insitu (copy), read | 450 | 1,101 | 3,944 | 140,178 | 1.9 |
| Boost.JSON | SAX | 688 | 1,020 | 5,676 | 61,670 | 3.0 |
| nlohmann/json `json` | sax | 801 | 1,705 | 5,532 | 94,952 | 4.0 |
| simd-json (Rust) | visitor (copy) | 668 | 1,688 | 5,134 | 224,411 | 4.0 |
| serde_json (Rust) | visitor | 1,311 | 2,316 | 7,241 | 130,249 | 5.1 |
| RapidJSON | SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,301 (U 1,141) | 2,166 (U 1,832) | 10,523 | 162,402 | 5.3 (U 3.8) |
| Glaze | generic (double, strict), lazy_json [P] | 2,410 | 4,407 | 10,384 | 285,204 (P 239,395) | 9.4 (P 6.3) |
**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) | 325 | 784 | 1,686 | 91,622 | 1.6 |
| simdjson | DOM, On-Demand [P] | 315 (P 202) | 754 (P 642) | 3,190 (P 907) | 129,838 (P 50,352) | 1.9 (P 1.3) |
| sonic-rs (Rust) | structs | 557 | 1,023 | 2,247 | 91,996 | 2.0 |
| sonic-cpp | Document [U] | – (U 410) | – (U 952) | – (U 3,249) | – (U 106,866) | – (U 1.8) |
| yyjson | insitu (copy) | 403 | 1,011 | 3,268 | 139,623 | 1.7 |
| Glaze | structs (validate_skipped), structs [P] | 619 (P 360) | 2,238 (P 412) | 2,544 (P 433) | 96,608 (P 74,849) | 2.1 (P 1.5) |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 769 | 1,504 | 2,442 (U 2,323) | 108,386 | 3.1 (U 3.0) |
| simd-json (Rust) | structs (copy) | 730 | 1,658 | 4,915 | 266,073 | 3.6 |
| Boost.JSON | parse | 1,326 | 1,871 | 6,892 | 196,136 | 6.1 |
| RapidJSON | Document (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,274 (U 1,098) | 2,060 | 10,432 | 165,343 (U 156,012) | 5.2 (U 3.7) |
| nlohmann/json `json` | parse, structs (from_json) | 3,643 | 6,199 | 11,694 | 605,646 | 14.5 |
| **nlohmann/json `json_document`** | parse | 327 | 752 | 1,684 | 91,119 | 1.7 |
| simdjson | DOM, On-Demand (key selectors) [P], On-Demand structs [P] | 337 (P 183) | 686 (P 483) | 3,191 (P 700) | 128,921 (P 49,265) | 1.9 (P 1.2) |
| yyjson | insitu (copy), read, read (raw numbers) | 445 | 956 | 2,139 | 143,238 | 1.8 |
| sonic-rs (Rust) | structs | 538 | 1,028 | 2,283 | 91,950 | 2.0 |
| sonic-cpp | Document [U] | – (U 409) | – (U 944) | – (U 3,172) | – (U 112,498) | – (U 1.8) |
| Glaze | structs (validate_skipped), structs [P] | 679 (P 355) | 1,971 (P 400) | 2,518 (P 430) | 89,804 (P 68,491) | 2.1 (P 1.5) |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 722 | 1,559 | 2,585 (U 2,448) | 114,701 | 3.0 |
| Boost.JSON | parse, parse_into structs | 954 | 1,223 | 6,775 | 99,560 | 3.6 |
| simd-json (Rust) | structs (copy) | 740 | 1,802 | 4,997 | 258,566 | 3.7 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,405 (U 1,218) | 1,895 | 10,256 | 165,022 (U 153,824) | 5.4 (U 4.0) |
| nlohmann/json `json` | parse, structs (from_json) | 3,693 | 5,596 | 11,689 | 601,495 | 13.9 |
**edit**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | editable | 552 | 1,082 | 5,801 | 198,867 | 3.1 |
| sonic-cpp | Document [U] | – (U 629) | – (U 1,455) | – (U 8,594) | – (U 185,870) | – (U 3.5) |
| yyjson | insitu (copy) + mut copy, mut copy | 801 | 1,641 | 7,402 | 313,182 | 3.7 |
| sonic-rs (Rust) | Value | 1,189 | 2,384 | 8,007 | 413,714 | 6.6 |
| Boost.JSON | parse | 1,771 | 2,496 | 12,504 | 311,015 | 8.6 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,983 (U 1,799) | 2,859 | 19,769 | 298,015 (U 286,231) | 9.0 (U 7.5) |
| simd-json (Rust) | borrowed (copy), owned (copy) | 2,071 | 4,465 | 16,360 | 416,658 | 9.0 |
| nlohmann/json `json` | ordered_json | 3,046 | 5,087 | 15,464 | 863,465 | 13.8 |
| Glaze | generic | 3,547 | 6,080 | 22,146 | 937,712 | 15.6 |
| serde_json (Rust) | Value | 4,474 | 6,922 | 18,301 | 805,290 | 21.2 |
| **nlohmann/json `json_document`** | editable | 531 | 1,081 | 5,914 | 174,422 | 3.4 |
| sonic-cpp | Document [U] | – (U 624) | – (U 1,445) | – (U 8,363) | – (U 188,709) | – (U 3.6) |
| yyjson | insitu (copy) + mut copy, mut copy | 798 | 1,645 | 7,430 | 297,562 | 4.1 |
| sonic-rs (Rust) | Value | 1,201 | 2,416 | 7,958 | 421,718 | 6.9 |
| Boost.JSON | parse | 1,755 | 2,482 | 12,291 | 331,024 | 9.5 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,981 (U 1,824) | 2,969 (U 2,810) | 19,675 | 306,064 | 9.3 (U 7.6) |
| simd-json (Rust) | borrowed (copy), owned (copy) | 1,924 | 4,575 | 15,746 | 435,817 | 9.6 |
| nlohmann/json `json` | ordered_json | 2,914 | 5,182 | 15,284 | 842,581 | 14.8 |
| Glaze | generic (strict), generic [P] | 3,451 (P 3,332) | 6,457 (P 6,198) | 21,021 | 737,298 | 16.7 (P 16.1) |
| serde_json (Rust) | Value | 4,036 | 7,181 | 17,371 | 843,034 | 16.9 |
**minify**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | parse + dump | 482 | 1,001 | 5,856 | 159,533 | 2.5 |
| yyjson | insitu (copy) + write, read + write | 658 | 1,268 | 6,934 | 210,677 | 2.9 |
| sonic-cpp | Document + Serialize [U] | – (U 633) | – (U 1,436) | – (U 8,992) | – (U 178,113) | – (U 3.3) |
| sonic-rs (Rust) | Value | 988 | 2,093 | 7,775 | 217,697 | 5.3 |
| simdjson | DOM + to_string, minify [P] | 799 (P 104) | 1,461 (P 246) | 15,173 (P 365) | 310,524 (P 47,397) | 4.7 (P 0.5) |
| Boost.JSON | parse + serialize | 1,803 | 2,480 | 13,545 | 324,721 | 8.7 |
| simd-json (Rust) | borrowed (copy) | 1,924 | 4,375 | 15,278 | 419,474 | 8.7 |
| RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U] | 2,606 (U 1,820) | 2,810 (U 2,456) | 22,160 | 360,474 (U 277,281) | 13.6 (U 9.4) |
| Glaze | generic, minify_json [P] | 3,394 (P 419) | 6,016 (P 1,301) | 23,223 (P 2,832) | 512,061 (P 92,190) | 15.1 (P 1.9) |
| nlohmann/json `json` | parse + dump | 4,168 | 6,253 | 16,656 | 777,125 | 16.4 |
| serde_json (Rust) | Value | 4,081 | 6,880 | 17,249 | 615,033 | 18.4 |
| **nlohmann/json `json_document`** | parse + dump | 480 | 995 | 5,655 | 147,812 | 2.5 |
| yyjson | insitu (copy) + write, read + write | 622 | 1,264 | 6,624 | 198,884 | 2.9 |
| sonic-cpp | Document + Serialize [U] | – (U 633) | – (U 1,435) | – (U 8,404) | – (U 179,298) | – (U 3.3) |
| simdjson | DOM + to_string, minify [P] | 787 (P 104) | 1,300 (P 247) | 8,944 (P 367) | 295,041 (P 46,756) | 4.7 (P 0.5) |
| sonic-rs (Rust) | Value | 1,003 | 2,174 | 7,753 | 217,354 | 5.5 |
| Boost.JSON | parse + serialize | 1,772 | 2,495 | 12,783 | 304,037 | 8.5 |
| simd-json (Rust) | borrowed (copy) | 1,878 | 4,655 | 15,955 | 419,412 | 9.5 |
| RapidJSON | Document + Writer, Document + Writer (no encoding check) [U], SAX to Writer, SAX to Writer (no encoding check) [U] | 2,458 (U 1,764) | 2,873 (U 2,494) | 21,009 | 353,444 (U 271,282) | 13.5 (U 9.6) |
| Glaze | generic (strict), minify_json [P] | 3,332 (P 416) | 6,408 (P 1,298) | 21,303 (P 2,661) | 494,208 (P 93,101) | 15.0 (P 1.9) |
| nlohmann/json `json` | parse + dump | 3,822 | 6,431 | 15,804 | 737,629 | 15.2 |
| serde_json (Rust) | Value | 4,220 | 6,876 | 17,276 | 628,192 | 16.7 |
**write**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | dump | 155 | 253 | 3,899 | 69,593 | 1.0 |
| yyjson | write | 190 | 320 | 3,349 | 69,582 | 1.2 |
| sonic-cpp | Serialize | 259 | 510 | 5,269 | 76,584 | 1.5 |
| nlohmann/json `json` | dump | 433 | 607 | 3,896 | 126,529 | 1.9 |
| Glaze | generic | 367 | 688 | 4,097 | 134,165 | 1.9 |
| sonic-rs (Rust) | Value | 442 | 935 | 3,954 | 100,889 | 2.6 |
| Boost.JSON | serialize | 454 | 835 | 5,468 | 132,656 | 2.5 |
| simd-json (Rust) | borrowed | 604 | 809 | 4,825 | 110,710 | 2.7 |
| serde_json (Rust) | Value | 563 | 882 | 3,979 | 120,716 | 2.9 |
| simdjson | to_string | 471 | 712 | 11,156 | 186,861 | 2.9 |
| RapidJSON | Writer | 653 | 978 | 9,071 | 138,832 | 4.0 |
| **nlohmann/json `json_document`** | dump | 154 | 252 | 3,864 | 67,299 | 0.9 |
| yyjson | write | 193 | 320 | 3,391 | 68,367 | 1.2 |
| sonic-cpp | Serialize | 260 | 508 | 5,333 | 73,212 | 1.4 |
| nlohmann/json `json` | dump | 431 | 605 | 3,894 | 116,689 | 1.9 |
| Glaze | generic, generic (strict) | 379 | 730 | 4,088 | 133,699 | 2.0 |
| Boost.JSON | serialize | 452 | 827 | 5,615 | 123,767 | 2.5 |
| sonic-rs (Rust) | Value | 445 | 931 | 4,048 | 104,487 | 2.8 |
| simdjson | to_string | 457 | 597 | 5,272 | 173,760 | 2.9 |
| simd-json (Rust) | borrowed | 597 | 809 | 4,817 | 114,245 | 3.1 |
| serde_json (Rust) | Value | 560 | 848 | 3,964 | 129,473 | 3.2 |
| RapidJSON | Writer | 649 | 974 | 9,080 | 129,698 | 3.7 |
??? info "Times in µs on x86-64 with GCC 13"
@@ -1943,96 +1993,96 @@ three declare the same fields.
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | accept, parse | 325 | 742 | 1,699 | 84,790 | 1.6 |
| sonic-rs (Rust) | IgnoredAny | 470 | 966 | 2,249 | 54,246 | 1.8 |
| simdjson | DOM | 328 | 810 | 3,178 | 121,064 | 1.9 |
| Glaze | validate_json | 590 | 1,399 | 1,847 | 71,293 | 2.3 |
| sonic-cpp | Document [U] | – (U 425) | – (U 1,032) | – (U 3,618) | – (U 95,772) | – (U 1.8) |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 634 (U 487) | 1,448 (U 1,370) | 2,402 (U 2,318) | 66,822 (U 59,801) | 2.4 (U 1.9) |
| yyjson | insitu (copy), read | 390 | 995 | 5,320 | 132,598 | 1.7 |
| Boost.JSON | SAX | 738 | 1,007 | 5,465 | 59,249 | 3.2 |
| simd-json (Rust) | tape (copy) | 592 | 1,426 | 4,303 | 211,716 | 2.8 |
| nlohmann/json `json` | accept | 789 | 1,631 | 4,570 | 94,289 | 4.0 |
| RapidJSON | SAX, SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,638 (U 1,135) | 2,230 (U 1,666) | 11,264 | 209,691 (U 157,274) | 7.3 (U 3.8) |
| **nlohmann/json `json_document`** | accept, parse | 332 | 764 | 1,691 | 82,408 | 1.6 |
| sonic-rs (Rust) | IgnoredAny | 482 | 969 | 2,489 | 55,486 | 1.8 |
| yyjson | insitu (copy), read, read (raw numbers) | 393 | 988 | 2,211 | 131,844 | 1.6 |
| simdjson | DOM | 312 | 730 | 3,166 | 123,620 | 1.8 |
| sonic-cpp | Document [U] | – (U 407) | – (U 1,022) | – (U 3,560) | – (U 90,971) | – (U 1.6) |
| Glaze | validate_json | 597 | 1,407 | 1,844 | 71,646 | 2.3 |
| Boost.JSON | SAX, SAX (numbers: none) | 725 | 924 | 1,637 | 62,571 | 3.1 |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 622 (U 480) | 1,440 (U 1,371) | 2,621 (U 2,538) | 65,602 (U 60,154) | 2.5 (U 1.9) |
| simd-json (Rust) | tape (copy) | 563 | 1,403 | 4,630 | 212,467 | 2.9 |
| nlohmann/json `json` | accept | 783 | 1,619 | 4,621 | 98,860 | 3.9 |
| RapidJSON | SAX, SAX (no encoding check) [U], SAX (raw numbers), SAX (raw numbers) (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,651 (U 1,120) | 2,232 (U 1,660) | 10,380 | 210,972 (U 157,831) | 7.1 (U 3.8) |
**sum**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| simdjson | On-Demand | 358 | 817 | 3,407 | 90,338 | 2.0 |
| **nlohmann/json `json_document`** | parse | 405 | 945 | 4,038 | 87,781 | 2.1 |
| sonic-rs (Rust) | visitor | 494 | 1,135 | 4,580 | 59,149 | 2.4 |
| sonic-cpp | Document [U] | – (U 482) | – (U 1,234) | – (U 4,412) | – (U 105,062) | – (U 2.2) |
| yyjson | insitu (copy) | 447 | 1,148 | 5,959 | 138,001 | 2.0 |
| Boost.JSON | SAX | 753 | 1,030 | 5,688 | 61,479 | 3.2 |
| nlohmann/json `json` | sax | 807 | 1,647 | 5,962 | 100,804 | 4.1 |
| simd-json (Rust) | visitor (copy) | 722 | 1,686 | 5,191 | 220,582 | 3.8 |
| serde_json (Rust) | visitor | 1,318 | 2,299 | 7,610 | 123,810 | 4.3 |
| RapidJSON | SAX, SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,679 (U 1,185) | 2,388 (U 1,768) | 11,030 | 216,612 (U 161,397) | 7.4 (U 4.1) |
| Glaze | generic, lazy_json [P] | 3,206 (P 2,948) | 5,928 | 20,405 (P 16,203) | 403,975 (P 231,683) | 13.5 (P 6.0) |
| simdjson | On-Demand | 360 | 819 | 3,269 | 95,622 | 2.0 |
| **nlohmann/json `json_document`** | parse | 410 | 960 | 4,026 | 91,857 | 2.1 |
| sonic-rs (Rust) | visitor | 503 | 1,123 | 4,418 | 59,993 | 2.8 |
| sonic-cpp | Document [U] | – (U 478) | – (U 1,234) | – (U 4,454) | – (U 109,509) | – (U 2.1) |
| yyjson | insitu (copy), read | 447 | 1,146 | 6,051 | 137,148 | 2.0 |
| Boost.JSON | SAX | 748 | 1,018 | 5,668 | 64,462 | 3.2 |
| nlohmann/json `json` | sax | 813 | 1,676 | 6,045 | 104,843 | 4.1 |
| simd-json (Rust) | visitor (copy) | 668 | 1,688 | 5,134 | 224,411 | 4.0 |
| serde_json (Rust) | visitor | 1,311 | 2,316 | 7,241 | 130,249 | 5.1 |
| RapidJSON | Document (no encoding check) [U], SAX, SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,679 (U 1,175) | 2,311 (U 1,740) | 11,995 | 226,217 (U 167,558) | 7.4 (U 4.1) |
| Glaze | generic (double) [P], generic (double, strict), lazy_json [P] | 2,399 | 4,212 | 11,369 | 307,211 (P 236,277) | 9.8 (P 6.2) |
**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) | 347 | 763 | 1,700 | 98,540 | 1.7 |
| sonic-rs (Rust) | structs | 557 | 1,023 | 2,247 | 91,996 | 2.0 |
| simdjson | DOM, On-Demand [P] | 337 (P 211) | 837 (P 804) | 3,283 (P 1,138) | 134,701 (P 51,878) | 2.1 (P 1.4) |
| Glaze | structs (validate_skipped), structs [P] | 539 (P 348) | 1,475 (P 408) | 1,850 (P 449) | 99,194 (P 77,565) | 1.9 (P 1.5) |
| sonic-cpp | Document [U] | – (U 419) | – (U 1,044) | – (U 3,675) | – (U 111,999) | – (U 1.9) |
| yyjson | insitu (copy), read | 408 | 996 | 5,375 | 142,713 | 1.8 |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 769 | 1,504 | 2,442 (U 2,323) | 108,386 | 3.1 (U 3.0) |
| simd-json (Rust) | structs (copy) | 730 | 1,658 | 4,915 | 266,073 | 3.6 |
| Boost.JSON | parse | 1,605 | 1,903 | 7,605 | 214,973 | 6.7 |
| RapidJSON | Document, Document (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,779 (U 1,194) | 2,257 (U 1,923) | 12,214 | 226,825 (U 175,262) | 7.2 (U 3.9) |
| nlohmann/json `json` | parse, structs (from_json) | 3,523 | 5,534 | 12,684 | 623,070 | 13.6 |
| **nlohmann/json `json_document`** | parse, structs (from_json) | 361 | 788 | 1,693 | 92,200 | 1.8 |
| yyjson | read, read (raw numbers) | 404 | 1,000 | 2,214 | 139,234 | 1.8 |
| sonic-rs (Rust) | structs | 538 | 1,028 | 2,283 | 91,950 | 2.0 |
| simdjson | DOM, On-Demand (key selectors) [P], On-Demand [P] | 348 (P 190) | 740 (P 498) | 3,170 (P 726) | 124,766 (P 49,901) | 2.2 (P 1.3) |
| Glaze | structs (validate_skipped), structs [P] | 595 (P 340) | 1,500 (P 403) | 1,854 (P 447) | 86,510 (P 68,532) | 2.1 (P 1.5) |
| sonic-cpp | Document [U] | – (U 453) | – (U 1,041) | – (U 3,639) | – (U 106,529) | – (U 1.9) |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 722 | 1,559 | 2,585 (U 2,448) | 114,701 | 3.0 |
| Boost.JSON | parse_into structs | 973 | 1,358 | 6,913 | 103,145 | 4.2 |
| simd-json (Rust) | structs (copy) | 740 | 1,802 | 4,997 | 258,566 | 3.7 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,703 (U 1,176) | 2,297 (U 1,915) | 11,423 | 217,155 (U 171,258) | 8.2 (U 4.3) |
| nlohmann/json `json` | parse, structs (from_json) | 3,609 | 5,673 | 12,031 | 607,902 | 14.4 |
**edit**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | editable | 552 | 1,112 | 6,027 | 203,217 | 3.3 |
| sonic-cpp | Document [U] | – (U 663) | – (U 1,572) | – (U 8,879) | – (U 181,438) | – (U 3.6) |
| yyjson | insitu (copy) + mut copy, mut copy | 810 | 1,724 | 9,806 | 322,621 | 3.8 |
| sonic-rs (Rust) | Value | 1,189 | 2,384 | 8,007 | 413,714 | 6.6 |
| Boost.JSON | parse | 2,026 | 2,943 | 13,352 | 337,632 | 9.4 |
| simd-json (Rust) | borrowed (copy), owned (copy) | 2,071 | 4,465 | 16,360 | 416,658 | 9.0 |
| RapidJSON | Document (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 2,511 (U 1,896) | 3,310 (U 2,942) | 20,627 | 362,717 (U 314,375) | 11.6 (U 7.9) |
| nlohmann/json `json` | ordered_json | 3,156 | 5,280 | 16,247 | 922,463 | 15.0 |
| Glaze | generic | 3,767 | 6,532 | 24,351 | 940,280 | 16.2 |
| serde_json (Rust) | Value | 4,474 | 6,922 | 18,301 | 805,290 | 21.2 |
| **nlohmann/json `json_document`** | editable | 630 | 1,128 | 5,910 | 184,135 | 3.5 |
| sonic-cpp | Document [U] | – (U 662) | – (U 1,560) | – (U 8,647) | – (U 191,340) | – (U 3.5) |
| yyjson | insitu (copy) + mut copy, mut copy | 824 | 1,729 | 9,727 | 299,300 | 3.8 |
| sonic-rs (Rust) | Value | 1,201 | 2,416 | 7,958 | 421,718 | 6.9 |
| Boost.JSON | parse | 2,086 | 2,928 | 13,189 | 340,875 | 9.8 |
| simd-json (Rust) | borrowed (copy), owned (copy) | 1,924 | 4,575 | 15,746 | 435,817 | 9.6 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 2,588 (U 2,120) | 3,273 (U 2,905) | 20,202 | 363,265 (U 307,430) | 12.0 (U 8.4) |
| nlohmann/json `json` | ordered_json, parse | 3,222 | 5,204 | 16,070 | 855,263 | 15.2 |
| serde_json (Rust) | Value | 4,036 | 7,181 | 17,371 | 843,034 | 16.9 |
| Glaze | generic (strict), generic [P] | 4,023 (P 3,901) | 6,662 | 23,242 | 724,016 | 18.0 |
**minify**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | parse + dump | 497 | 1,028 | 5,930 | 156,014 | 2.6 |
| yyjson | insitu (copy) + write, read + write | 657 | 1,326 | 9,202 | 195,618 | 3.1 |
| sonic-cpp | Document + Serialize [U] | – (U 667) | – (U 1,568) | – (U 9,007) | – (U 174,144) | – (U 3.5) |
| sonic-rs (Rust) | Value | 988 | 2,093 | 7,775 | 217,697 | 5.3 |
| simdjson | DOM + to_string, minify [P] | 839 (P 128) | 1,588 (P 322) | 14,645 (P 469) | 292,317 (P 50,456) | 4.9 (P 0.6) |
| Boost.JSON | parse + serialize | 1,931 | 2,902 | 13,756 | 328,321 | 9.8 |
| simd-json (Rust) | borrowed (copy) | 1,924 | 4,375 | 15,278 | 419,474 | 8.7 |
| RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U] | 2,963 (U 1,872) | 3,189 (U 2,490) | 21,761 | 406,899 (U 282,973) | 15.7 (U 11.1) |
| Glaze | generic, minify_json [P] | 3,647 (P 428) | 6,503 (P 1,144) | 25,082 (P 2,468) | 546,003 (P 94,867) | 16.1 (P 2.0) |
| nlohmann/json `json` | parse + dump | 3,980 | 6,495 | 17,573 | 730,814 | 16.5 |
| serde_json (Rust) | Value | 4,081 | 6,880 | 17,249 | 615,033 | 18.4 |
| **nlohmann/json `json_document`** | parse + dump | 503 | 1,045 | 5,569 | 156,948 | 2.6 |
| yyjson | insitu (copy) + write, read + write | 605 | 1,323 | 9,272 | 200,777 | 3.0 |
| sonic-cpp | Document + Serialize [U] | – (U 640) | – (U 1,558) | – (U 8,901) | – (U 175,992) | – (U 3.2) |
| simdjson | DOM + to_string, minify [P] | 792 (P 128) | 1,348 (P 331) | 8,324 (P 464) | 290,206 (P 47,486) | 4.7 (P 0.6) |
| sonic-rs (Rust) | Value | 1,003 | 2,174 | 7,753 | 217,354 | 5.5 |
| Boost.JSON | parse + serialize | 1,911 | 2,840 | 13,417 | 307,134 | 9.2 |
| simd-json (Rust) | borrowed (copy) | 1,878 | 4,655 | 15,955 | 419,412 | 9.5 |
| RapidJSON | Document + Writer, Document + Writer (no encoding check) [U], SAX to Writer, SAX to Writer (no encoding check) [U] | 2,733 (U 1,855) | 3,088 (U 2,516) | 21,466 (U 20,678) | 410,160 (U 295,852) | 15.2 (U 10.1) |
| nlohmann/json `json` | parse + dump | 3,741 | 6,096 | 16,580 | 721,380 | 15.1 |
| Glaze | generic (strict), minify_json [P] | 3,520 (P 425) | 6,525 (P 1,142) | 24,118 (P 2,391) | 500,684 (P 97,583) | 15.6 (P 2.0) |
| serde_json (Rust) | Value | 4,220 | 6,876 | 17,276 | 628,192 | 16.7 |
**write**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | dump | 153 | 271 | 3,934 | 72,106 | 0.9 |
| yyjson | write | 216 | 331 | 3,620 | 76,733 | 1.2 |
| sonic-cpp | Serialize | 270 | 533 | 5,100 | 80,556 | 1.5 |
| Glaze | generic | 364 | 712 | 4,265 | 143,981 | 1.9 |
| nlohmann/json `json` | dump | 441 | 628 | 4,091 | 129,455 | 2.0 |
| sonic-rs (Rust) | Value | 442 | 935 | 3,954 | 100,889 | 2.6 |
| simd-json (Rust) | borrowed | 604 | 809 | 4,825 | 110,710 | 2.7 |
| serde_json (Rust) | Value | 563 | 882 | 3,979 | 120,716 | 2.9 |
| Boost.JSON | serialize | 478 | 1,015 | 5,750 | 137,840 | 2.5 |
| simdjson | to_string | 491 | 750 | 10,840 | 196,092 | 2.9 |
| RapidJSON | Writer | 746 | 1,032 | 8,773 | 150,334 | 4.3 |
| **nlohmann/json `json_document`** | dump | 153 | 272 | 3,979 | 68,836 | 0.9 |
| yyjson | write | 180 | 330 | 3,620 | 70,502 | 1.2 |
| sonic-cpp | Serialize | 262 | 532 | 5,268 | 74,547 | 1.4 |
| Glaze | generic | 336 | 663 | 3,685 | 127,928 | 1.8 |
| nlohmann/json `json` | dump | 440 | 636 | 4,063 | 119,266 | 2.0 |
| sonic-rs (Rust) | Value | 445 | 931 | 4,048 | 104,487 | 2.8 |
| simdjson | to_string | 451 | 598 | 5,334 | 174,144 | 2.8 |
| Boost.JSON | serialize | 459 | 1,012 | 6,253 | 126,330 | 2.4 |
| simd-json (Rust) | borrowed | 597 | 809 | 4,817 | 114,245 | 3.1 |
| serde_json (Rust) | Value | 560 | 848 | 3,964 | 129,473 | 3.2 |
| RapidJSON | Writer | 688 | 1,020 | 9,144 | 138,466 | 3.9 |
??? info "Times in µs on x86-64 with Clang 23"
@@ -2040,96 +2090,96 @@ three declare the same fields.
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | accept, parse | 302 | 720 | 1,784 | 81,370 | 1.5 |
| sonic-rs (Rust) | IgnoredAny | 470 | 966 | 2,249 | 54,246 | 1.8 |
| simdjson | DOM | 311 | 736 | 3,343 | 115,626 | 1.8 |
| yyjson | insitu (copy), read | 379 | 896 | 2,851 | 124,180 | 1.6 |
| sonic-cpp | Document [U] | – (U 450) | – (U 1,026) | – (U 3,140) | – (U 98,200) | – (U 2.0) |
| Glaze | validate_json | 621 | 1,402 | 1,806 | 76,164 | 2.6 |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 634 (U 487) | 1,448 (U 1,370) | 2,402 (U 2,318) | 66,822 (U 59,801) | 2.4 (U 1.9) |
| Boost.JSON | SAX | 596 | 923 | 6,234 | 56,654 | 2.4 |
| nlohmann/json `json` | accept | 746 | 1,424 | 4,201 | 100,878 | 4.1 |
| simd-json (Rust) | tape (copy) | 592 | 1,426 | 4,303 | 211,716 | 2.8 |
| RapidJSON | SAX, SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,845 (U 1,227) | 2,150 (U 1,665) | 11,719 | 233,417 (U 156,744) | 8.6 (U 4.3) |
| **nlohmann/json `json_document`** | accept, parse | 305 | 715 | 2,019 | 83,361 | 1.4 |
| sonic-rs (Rust) | IgnoredAny | 482 | 969 | 2,489 | 55,486 | 1.8 |
| Boost.JSON | SAX, SAX (numbers: none) | 568 | 903 | 1,896 | 56,244 | 2.3 |
| yyjson | insitu (copy), read, read (raw numbers) | 380 | 918 | 2,533 | 126,565 | 1.6 |
| simdjson | DOM | 306 | 713 | 3,652 | 121,820 | 1.8 |
| sonic-cpp | Document [U] | – (U 450) | – (U 1,007) | – (U 3,351) | – (U 99,056) | – (U 1.9) |
| Glaze | validate_json | 617 | 1,370 | 1,990 | 81,604 | 2.5 |
| serde_json (Rust) | IgnoredAny [U], from_utf8 + IgnoredAny | 622 (U 480) | 1,440 (U 1,371) | 2,621 (U 2,538) | 65,602 (U 60,154) | 2.5 (U 1.9) |
| nlohmann/json `json` | accept | 736 | 1,417 | 4,605 | 95,644 | 4.0 |
| simd-json (Rust) | tape (copy) | 563 | 1,403 | 4,630 | 212,467 | 2.9 |
| RapidJSON | SAX, SAX (no encoding check) [U], SAX (raw numbers), SAX (raw numbers) (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,815 (U 1,174) | 2,123 (U 1,663) | 11,775 | 237,714 (U 161,724) | 8.4 (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 | 378 | 891 | 4,151 | 89,689 | 1.9 |
| simdjson | DOM, On-Demand | 399 | 946 | 4,100 | 120,056 | 2.2 |
| sonic-rs (Rust) | visitor | 494 | 1,135 | 4,580 | 59,149 | 2.4 |
| yyjson | insitu (copy), read | 435 | 1,048 | 3,467 | 135,382 | 1.9 |
| Boost.JSON | SAX | 582 | 927 | 5,935 | 56,310 | 2.4 |
| sonic-cpp | Document [U] | – (U 504) | – (U 1,180) | – (U 3,736) | – (U 110,324) | – (U 2.2) |
| nlohmann/json `json` | sax | 784 | 1,466 | 5,345 | 101,437 | 4.1 |
| simd-json (Rust) | visitor (copy) | 722 | 1,686 | 5,191 | 220,582 | 3.8 |
| serde_json (Rust) | visitor | 1,318 | 2,299 | 7,610 | 123,810 | 4.3 |
| RapidJSON | SAX, SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,869 (U 1,237) | 2,172 (U 1,770) | 12,183 | 253,075 (U 163,826) | 8.4 (U 4.4) |
| Glaze | generic, lazy_json [P] | 3,890 (P 2,829) | 7,282 | 25,798 (P 17,578) | 501,805 (P 223,672) | 16.7 (P 5.9) |
| **nlohmann/json `json_document`** | parse | 373 | 893 | 4,353 | 89,554 | 1.9 |
| simdjson | DOM, On-Demand | 396 | 969 | 4,454 | 115,048 | 2.3 |
| yyjson | insitu (copy), read | 437 | 1,091 | 3,587 | 135,079 | 1.9 |
| sonic-rs (Rust) | visitor | 503 | 1,123 | 4,418 | 59,993 | 2.8 |
| Boost.JSON | SAX | 582 | 927 | 6,356 | 57,388 | 2.4 |
| sonic-cpp | Document [U] | – (U 506) | – (U 1,208) | – (U 4,034) | – (U 107,937) | – (U 2.3) |
| nlohmann/json `json` | sax | 750 | 1,488 | 5,684 | 95,696 | 4.1 |
| simd-json (Rust) | visitor (copy) | 668 | 1,688 | 5,134 | 224,411 | 4.0 |
| serde_json (Rust) | visitor | 1,311 | 2,316 | 7,241 | 130,249 | 5.1 |
| RapidJSON | SAX, SAX (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 1,866 (U 1,233) | 2,308 (U 1,863) | 13,209 | 251,431 (U 169,921) | 8.5 (U 4.4) |
| Glaze | generic (double) [P], generic (double, strict), lazy_json [P] | 2,516 | 4,350 | 13,015 | 311,560 (P 215,314) | 10.1 (P 6.0) |
**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) | 324 | 728 | 1,784 | 89,731 | 1.6 |
| simdjson | DOM, On-Demand [P] | 330 (P 210) | 743 (P 610) | 3,291 (P 861) | 129,470 (P 48,548) | 2.0 (P 1.3) |
| yyjson | insitu (copy), read | 387 | 900 | 2,814 | 139,634 | 1.7 |
| sonic-rs (Rust) | structs | 557 | 1,023 | 2,247 | 91,996 | 2.0 |
| Glaze | structs (validate_skipped), structs [P] | 560 (P 345) | 1,329 (P 424) | 1,780 (P 463) | 93,674 (P 76,186) | 2.2 (P 1.7) |
| sonic-cpp | Document [U] | – (U 461) | – (U 1,024) | – (U 3,030) | – (U 109,906) | – (U 2.0) |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 769 | 1,504 | 2,442 (U 2,323) | 108,386 | 3.1 (U 3.0) |
| simd-json (Rust) | structs (copy) | 730 | 1,658 | 4,915 | 266,073 | 3.6 |
| Boost.JSON | parse | 1,264 | 1,659 | 7,173 | 202,456 | 5.9 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,901 (U 1,251) | 2,329 (U 1,936) | 11,814 | 251,223 (U 181,144) | 8.2 (U 4.3) |
| nlohmann/json `json` | parse, structs (from_json) | 3,654 | 5,494 | 11,583 | 641,176 | 15.2 |
| **nlohmann/json `json_document`** | parse | 324 | 729 | 1,795 | 94,289 | 1.6 |
| yyjson | insitu (copy), read (raw numbers) | 395 | 934 | 2,374 | 135,642 | 1.7 |
| simdjson | DOM, On-Demand [P] | 341 (P 186) | 723 (P 487) | 3,231 (P 703) | 128,975 (P 49,244) | 1.9 (P 1.3) |
| sonic-rs (Rust) | structs | 538 | 1,028 | 2,283 | 91,950 | 2.0 |
| Glaze | structs (validate_skipped), structs [P] | 563 (P 340) | 1,270 (P 412) | 1,790 (P 460) | 91,224 (P 70,238) | 2.2 (P 1.7) |
| sonic-cpp | Document [U] | – (U 486) | – (U 1,024) | – (U 3,201) | – (U 113,041) | – (U 2.1) |
| serde_json (Rust) | from_utf8 + structs, structs [U] | 722 | 1,559 | 2,585 (U 2,448) | 114,701 | 3.0 |
| Boost.JSON | parse, parse_into structs | 850 | 1,400 | 7,389 | 100,054 | 3.3 |
| simd-json (Rust) | structs (copy) | 740 | 1,802 | 4,997 | 258,566 | 3.7 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 1,893 (U 1,189) | 2,322 (U 1,944) | 11,855 | 255,774 (U 189,496) | 8.4 (U 4.2) |
| nlohmann/json `json` | parse, structs (from_json) | 3,825 | 5,475 | 12,002 | 639,061 | 16.0 |
**edit**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | editable | 534 | 1,100 | 5,935 | 208,247 | 3.0 |
| sonic-cpp | Document [U] | – (U 644) | – (U 1,508) | – (U 7,972) | – (U 184,491) | – (U 3.2) |
| yyjson | insitu (copy) + mut copy, mut copy | 912 | 1,686 | 7,407 | 318,770 | 4.0 |
| sonic-rs (Rust) | Value | 1,189 | 2,384 | 8,007 | 413,714 | 6.6 |
| Boost.JSON | parse | 1,722 | 2,614 | 12,953 | 346,073 | 8.5 |
| simd-json (Rust) | borrowed (copy), owned (copy) | 2,071 | 4,465 | 16,360 | 416,658 | 9.0 |
| RapidJSON | insitu (copy), insitu (copy) (no encoding check) [U] | 2,565 (U 1,902) | 3,328 (U 2,859) | 22,449 (U 21,667) | 378,036 (U 321,177) | 11.8 (U 7.8) |
| nlohmann/json `json` | ordered_json, parse | 3,058 | 5,099 | 16,378 | 920,570 | 14.7 |
| serde_json (Rust) | Value | 4,474 | 6,922 | 18,301 | 805,290 | 21.2 |
| Glaze | generic | 4,278 | 7,989 | 30,869 | 1,095,800 | 19.5 |
| **nlohmann/json `json_document`** | editable | 523 | 1,093 | 6,109 | 179,999 | 3.0 |
| sonic-cpp | Document [U] | – (U 645) | – (U 1,481) | – (U 7,924) | – (U 185,114) | – (U 3.4) |
| yyjson | insitu (copy) + mut copy, mut copy | 816 | 1,710 | 7,258 | 296,347 | 3.9 |
| sonic-rs (Rust) | Value | 1,201 | 2,416 | 7,958 | 421,718 | 6.9 |
| Boost.JSON | parse | 1,725 | 2,594 | 13,178 | 343,065 | 8.5 |
| simd-json (Rust) | borrowed (copy), owned (copy) | 1,924 | 4,575 | 15,746 | 435,817 | 9.6 |
| RapidJSON | Document (no encoding check) [U], insitu (copy), insitu (copy) (no encoding check) [U] | 2,486 (U 1,852) | 3,253 (U 2,889) | 21,592 | 397,189 (U 301,007) | 12.0 (U 7.9) |
| nlohmann/json `json` | ordered_json, parse | 2,810 | 5,096 | 16,935 | 864,150 | 14.4 |
| serde_json (Rust) | Value | 4,036 | 7,181 | 17,371 | 843,034 | 16.9 |
| Glaze | generic (strict), generic [P] | 4,192 | 8,087 | 30,621 | 868,944 | 20.1 |
**minify**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | parse + dump | 474 | 993 | 5,445 | 153,155 | 2.4 |
| yyjson | insitu (copy) + write, read + write | 625 | 1,256 | 6,261 | 212,043 | 3.1 |
| sonic-cpp | Document + Serialize [U] | – (U 647) | – (U 1,487) | – (U 7,924) | – (U 182,940) | – (U 3.2) |
| sonic-rs (Rust) | Value | 988 | 2,093 | 7,775 | 217,697 | 5.3 |
| simdjson | DOM + to_string, minify [P] | 857 (P 103) | 1,543 (P 256) | 16,516 (P 373) | 326,881 (P 51,243) | 5.1 (P 0.5) |
| Boost.JSON | parse + serialize | 1,758 | 2,553 | 12,744 | 358,018 | 9.0 |
| simd-json (Rust) | borrowed (copy) | 1,924 | 4,375 | 15,278 | 419,474 | 8.7 |
| RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U] | 2,465 (U 1,928) | 2,829 (U 2,416) | 22,132 | 374,258 (U 269,637) | 13.2 (U 9.5) |
| nlohmann/json `json` | parse + dump | 4,037 | 6,081 | 16,349 | 771,912 | 17.0 |
| serde_json (Rust) | Value | 4,081 | 6,880 | 17,249 | 615,033 | 18.4 |
| Glaze | generic, minify_json [P] | 4,215 (P 418) | 7,644 (P 1,062) | 29,762 (P 2,150) | 683,744 (P 93,265) | 18.7 (P 2.0) |
| **nlohmann/json `json_document`** | parse + dump | 472 | 993 | 5,467 | 152,456 | 2.5 |
| yyjson | insitu (copy) + write, read + write | 626 | 1,290 | 6,113 | 196,773 | 3.1 |
| sonic-cpp | Document + Serialize [U] | – (U 653) | – (U 1,491) | – (U 7,777) | – (U 172,744) | – (U 3.2) |
| simdjson | DOM + to_string, minify [P] | 824 (P 103) | 1,419 (P 256) | 8,134 (P 373) | 305,008 (P 47,751) | 4.9 (P 0.5) |
| sonic-rs (Rust) | Value | 1,003 | 2,174 | 7,753 | 217,354 | 5.5 |
| Boost.JSON | parse + serialize | 1,738 | 2,558 | 12,553 | 308,079 | 8.6 |
| simd-json (Rust) | borrowed (copy) | 1,878 | 4,655 | 15,955 | 419,412 | 9.5 |
| RapidJSON | Document + Writer, SAX to Writer, SAX to Writer (no encoding check) [U] | 2,403 (U 1,776) | 2,933 (U 2,429) | 21,919 | 359,464 (U 273,075) | 13.0 (U 9.5) |
| nlohmann/json `json` | parse + dump | 3,903 | 6,251 | 16,164 | 744,934 | 17.3 |
| serde_json (Rust) | Value | 4,220 | 6,876 | 17,276 | 628,192 | 16.7 |
| Glaze | generic (strict), minify_json [P] | 4,058 (P 413) | 8,169 (P 1,055) | 29,542 (P 2,139) | 615,992 (P 88,989) | 19.3 (P 2.0) |
**write**
| library | variant | `twitter.json` | `citm_catalog.json` | `canada.json` | `jeopardy.json` | one status (2.5 KB) |
| --- | --- | --: | --: | --: | --: | --: |
| **nlohmann/json `json_document`** | dump | 152 | 272 | 3,634 | 68,840 | 0.9 |
| yyjson | write | 219 | 364 | 3,380 | 75,136 | 1.3 |
| sonic-cpp | Serialize | 231 | 475 | 4,851 | 69,344 | 1.2 |
| nlohmann/json `json` | dump | 445 | 590 | 4,523 | 118,446 | 1.9 |
| Glaze | generic | 413 | 725 | 4,239 | 137,011 | 2.1 |
| sonic-rs (Rust) | Value | 442 | 935 | 3,954 | 100,889 | 2.6 |
| Boost.JSON | serialize | 489 | 902 | 5,659 | 127,823 | 2.5 |
| simd-json (Rust) | borrowed | 604 | 809 | 4,825 | 110,710 | 2.7 |
| serde_json (Rust) | Value | 563 | 882 | 3,979 | 120,716 | 2.9 |
| simdjson | to_string | 551 | 803 | 12,977 | 183,837 | 3.2 |
| RapidJSON | Writer | 644 | 966 | 9,614 | 127,167 | 3.9 |
| **nlohmann/json `json_document`** | dump | 152 | 272 | 3,724 | 69,602 | 0.9 |
| yyjson | write | 215 | 350 | 3,419 | 78,246 | 1.3 |
| sonic-cpp | Serialize | 232 | 480 | 4,857 | 70,286 | 1.2 |
| nlohmann/json `json` | dump | 438 | 597 | 4,571 | 119,233 | 2.0 |
| Glaze | generic | 388 | 717 | 4,140 | 138,931 | 2.0 |
| sonic-rs (Rust) | Value | 445 | 931 | 4,048 | 104,487 | 2.8 |
| Boost.JSON | serialize | 488 | 903 | 5,752 | 132,633 | 2.6 |
| simdjson | to_string | 492 | 680 | 4,787 | 183,334 | 3.0 |
| serde_json (Rust) | Value | 560 | 848 | 3,964 | 129,473 | 3.2 |
| simd-json (Rust) | borrowed | 597 | 809 | 4,817 | 114,245 | 3.1 |
| RapidJSON | Writer | 639 | 961 | 9,785 | 132,023 | 3.6 |
### F. Behavior changes
@@ -2436,12 +2486,16 @@ These are the checks behind the themes:
- **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 <a class="nj-theme" href="#theme-7" title="theme 7">7</a>). 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, and an output that reads back as the expected
document ([Appendix E](#e-comparison-with-other-libraries)).
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
+183 -183
View File
@@ -1,6 +1,6 @@
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-mac nj-blog-uc-mac-d" xmlns="http://www.w3.org/2000/svg">
<title id="nj-blog-uc-mac">Use cases: time of each library relative to the fastest, Apple M1 Max</title>
<desc id="nj-blog-uc-mac-d">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; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.30; yyjson sum: 1.14; yyjson select: 1.29; yyjson edit: 1.48; yyjson minify: 1.24; yyjson write: 1.24; sonic-rs (Rust) validate: 1.79; sonic-rs (Rust) sum: 1.54; sonic-rs (Rust) select: 1.84; sonic-rs (Rust) edit: 2.09; sonic-rs (Rust) minify: 1.93; sonic-rs (Rust) write: 2.37; simdjson validate: 1.46; simdjson sum: 1.24; simdjson select: 1.48 (0.85 checking less, partial); simdjson edit: n/a; simdjson minify: 2.41 (0.19 checking less, partial); simdjson write: 4.02; simd-json (Rust) validate: 1.95; simd-json (Rust) sum: 1.65; simd-json (Rust) select: 2.35; simd-json (Rust) edit: 2.84; simd-json (Rust) minify: 3.39; simd-json (Rust) write: 3.13; sonic-cpp validate: no fully validating way (2.33 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.85 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (2.30 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.70 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (2.02 checking less, no U&#8203;TF-8); sonic-cpp write: 1.59; Glaze validate: 1.88; Glaze sum: 5.58; Glaze select: 1.82 (0.83 checking less, partial); Glaze edit: 4.44; Glaze minify: 5.18 (1.04 checking less, partial); Glaze write: 2.21; Boost.J&#8203;SON validate: 2.87; Boost.J&#8203;SON sum: 2.00; Boost.J&#8203;SON select: 4.09; Boost.J&#8203;SON edit: 3.23; Boost.J&#8203;SON minify: 3.86; Boost.J&#8203;SON write: 3.68; serde_json (Rust) validate: 2.28 (2.06 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.59; serde_json (Rust) select: 2.38 (2.24 checking less, no U&#8203;TF-8); serde_json (Rust) edit: 4.97; serde_json (Rust) minify: 5.80; serde_json (Rust) write: 2.95; nlohmann/json json validate: 2.65; nlohmann/json json sum: 1.96; nlohmann/json json select: 6.83; nlohmann/json json edit: 3.58; nlohmann/json json minify: 4.87; nlohmann/json json write: 2.05; RapidJSON validate: 6.21 (4.04 checking less, no U&#8203;TF-8); RapidJSON sum: 4.45 (3.02 checking less, no U&#8203;TF-8); RapidJSON select: 5.90 (3.85 checking less, no U&#8203;TF-8); RapidJSON edit: 4.85 (3.82 checking less, no U&#8203;TF-8); RapidJSON minify: 4.85 (4.54 checking less, no U&#8203;TF-8); RapidJSON write: 5.78.</desc>
<desc id="nj-blog-uc-mac-d">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; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.29; yyjson sum: 1.14; yyjson select: 1.29; yyjson edit: 1.48; yyjson minify: 1.25; yyjson write: 1.25; simdjson validate: 1.36; simdjson sum: 1.18; simdjson select: 1.34 (0.75 checking less, partial); simdjson edit: n/a; simdjson minify: 2.06 (0.18 checking less, partial); simdjson write: 3.26; sonic-rs (Rust) validate: 1.77; sonic-rs (Rust) sum: 1.54; sonic-rs (Rust) select: 1.85; sonic-rs (Rust) edit: 2.11; sonic-rs (Rust) minify: 1.95; sonic-rs (Rust) write: 2.41; sonic-cpp validate: no fully validating way (2.31 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.85 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (2.32 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.70 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (2.04 checking less, no U&#8203;TF-8); sonic-cpp write: 1.62; simd-json (Rust) validate: 1.90; simd-json (Rust) sum: 1.63; simd-json (Rust) select: 2.40; simd-json (Rust) edit: 2.87; simd-json (Rust) minify: 3.43; simd-json (Rust) write: 3.14; Glaze validate: 1.86; Glaze sum: 3.85; Glaze select: 1.79 (0.82 checking less, partial); Glaze edit: 4.42; Glaze minify: 5.21 (1.03 checking less, partial); Glaze write: 2.24; Boost.J&#8203;SON validate: 2.34; Boost.J&#8203;SON sum: 1.98; Boost.J&#8203;SON select: 3.29; Boost.J&#8203;SON edit: 3.24; Boost.J&#8203;SON minify: 3.87; Boost.J&#8203;SON write: 3.75; serde_json (Rust) validate: 2.26 (2.05 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.60; serde_json (Rust) select: 2.42 (2.27 checking less, no U&#8203;TF-8); serde_json (Rust) edit: 5.06; serde_json (Rust) minify: 5.92; serde_json (Rust) write: 2.99; nlohmann/json json validate: 2.64; nlohmann/json json sum: 1.96; nlohmann/json json select: 6.94; nlohmann/json json edit: 3.61; nlohmann/json json minify: 4.95; nlohmann/json json write: 2.09; RapidJSON validate: 6.13 (3.96 checking less, no U&#8203;TF-8); RapidJSON sum: 4.41 (2.99 checking less, no U&#8203;TF-8); RapidJSON select: 6.00 (3.90 checking less, no U&#8203;TF-8); RapidJSON edit: 4.86 (3.82 checking less, no U&#8203;TF-8); RapidJSON minify: 4.90 (4.55 checking less, no U&#8203;TF-8); RapidJSON write: 5.86.</desc>
<text class="nj-charts-tick" x="270" y="34">validate</text>
<text class="nj-charts-tick" x="362" y="34">sum</text>
<text class="nj-charts-tick" x="454" y="34">select</text>
@@ -8,339 +8,339 @@
<text class="nj-charts-tick" x="638" y="34">minify</text>
<text class="nj-charts-tick" x="730" y="34">write</text>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 176 µs&#10;citm_catalog.json: 359 µs&#10;canada.json: 943 µs&#10;jeopardy.json: 22,862 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 176 µs&#10;citm_catalog.json: 360 µs&#10;canada.json: 959 µs&#10;jeopardy.json: 22,553 µs">
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 226 µs&#10;citm_catalog.json: 480 µs&#10;canada.json: 1,804 µs&#10;jeopardy.json: 29,208 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 225 µs&#10;citm_catalog.json: 482 µs&#10;canada.json: 1,818 µs&#10;jeopardy.json: 28,721 µs">
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 187 µs · structs (from_json)&#10;citm_catalog.json: 367 µs · parse&#10;canada.json: 987 µs · structs (from_json)&#10;jeopardy.json: 24,409 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 181 µs&#10;citm_catalog.json: 363 µs&#10;canada.json: 959 µs&#10;jeopardy.json: 24,308 µs">
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 290 µs&#10;citm_catalog.json: 560 µs&#10;canada.json: 2,742 µs&#10;jeopardy.json: 58,265 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 283 µs&#10;citm_catalog.json: 557 µs&#10;canada.json: 2,747 µs&#10;jeopardy.json: 57,355 µs">
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 264 µs&#10;citm_catalog.json: 496 µs&#10;canada.json: 2,566 µs&#10;jeopardy.json: 37,936 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 254 µs&#10;citm_catalog.json: 492 µs&#10;canada.json: 2,578 µs&#10;jeopardy.json: 37,096 µs">
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 75.2 µs&#10;citm_catalog.json: 136 µs&#10;canada.json: 1,621 µs&#10;jeopardy.json: 14,846 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 72.6 µs&#10;citm_catalog.json: 133 µs&#10;canada.json: 1,617 µs&#10;jeopardy.json: 14,444 µs">
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.30× the time of the fastest library (fully validating)&#10;twitter.json: 180 µs · insitu (copy)&#10;citm_catalog.json: 473 µs · read&#10;canada.json: 1,493 µs · read&#10;jeopardy.json: 30,542 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.29× the time of the fastest library (fully validating)&#10;twitter.json: 178 µs · read&#10;citm_catalog.json: 471 µs · read&#10;canada.json: 1,486 µs · insitu (copy)&#10;jeopardy.json: 30,278 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="225" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.30</text>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.29</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.14× the time of the fastest library (fully validating)&#10;twitter.json: 229 µs · insitu (copy)&#10;citm_catalog.json: 573 µs · read&#10;canada.json: 1,937 µs · read&#10;jeopardy.json: 37,916 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.14× the time of the fastest library (fully validating)&#10;twitter.json: 230 µs · insitu (copy)&#10;citm_catalog.json: 570 µs · read&#10;canada.json: 1,931 µs · insitu (copy)&#10;jeopardy.json: 37,534 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-0" x="317" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.14</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.29× the time of the fastest library (fully validating)&#10;twitter.json: 188 µs · insitu (copy)&#10;citm_catalog.json: 481 µs · read&#10;canada.json: 1,493 µs · read&#10;jeopardy.json: 33,546 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.29× the time of the fastest library (fully validating)&#10;twitter.json: 188 µs · read&#10;citm_catalog.json: 476 µs · read&#10;canada.json: 1,488 µs · insitu (copy)&#10;jeopardy.json: 32,182 µs · read (raw numbers)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.29</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.48× the time of the fastest library (fully validating)&#10;twitter.json: 438 µs · insitu (copy) + mut copy&#10;citm_catalog.json: 900 µs · mut copy&#10;canada.json: 3,694 µs · insitu (copy) + mut copy&#10;jeopardy.json: 84,447 µs · mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.48× the time of the fastest library (fully validating)&#10;twitter.json: 438 µs · mut copy&#10;citm_catalog.json: 897 µs · insitu (copy) + mut copy&#10;canada.json: 3,681 µs · insitu (copy) + mut copy&#10;jeopardy.json: 83,160 µs · insitu (copy) + mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="501" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.48</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.24× the time of the fastest library (fully validating)&#10;twitter.json: 289 µs · insitu (copy) + write&#10;citm_catalog.json: 640 µs · insitu (copy) + write&#10;canada.json: 3,213 µs · read + write&#10;jeopardy.json: 50,740 µs · read + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.25× the time of the fastest library (fully validating)&#10;twitter.json: 289 µs · insitu (copy) + write&#10;citm_catalog.json: 635 µs · insitu (copy) + write&#10;canada.json: 3,209 µs · read + write&#10;jeopardy.json: 50,039 µs · insitu (copy) + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.24</text>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.25</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.24× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 104 µs&#10;citm_catalog.json: 164 µs&#10;canada.json: 1,717 µs&#10;jeopardy.json: 20,119 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.25× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 100 µs&#10;citm_catalog.json: 164 µs&#10;canada.json: 1,714 µs&#10;jeopardy.json: 19,665 µs">
<rect class="nj-heat-1" x="685" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.24</text>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.25</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.79× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 329 µs&#10;citm_catalog.json: 684 µs&#10;canada.json: 1,930 µs&#10;jeopardy.json: 32,169 µs">
<rect class="nj-heat-2" x="225" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.79</text>
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">simdjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.36× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 199 µs&#10;citm_catalog.json: 448 µs&#10;canada.json: 1,885 µs&#10;jeopardy.json: 28,368 µs">
<rect class="nj-heat-1" x="225" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.36</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.54× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 372 µs&#10;citm_catalog.json: 778 µs&#10;canada.json: 2,695 µs&#10;jeopardy.json: 41,462 µs">
<rect class="nj-heat-2" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.54</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.18× the time of the fastest library (fully validating)&#10;twitter.json: 239 µs · D&#8203;OM&#10;citm_catalog.json: 570 µs · On-Demand&#10;canada.json: 2,372 µs · On-Demand&#10;jeopardy.json: 34,562 µs · D&#8203;OM">
<rect class="nj-heat-1" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.18</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.84× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 340 µs&#10;citm_catalog.json: 700 µs&#10;canada.json: 1,938 µs&#10;jeopardy.json: 41,203 µs">
<rect class="nj-heat-2" x="409" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.84</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.34× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 197 µs&#10;citm_catalog.json: 447 µs&#10;canada.json: 1,882 µs&#10;jeopardy.json: 30,173 µs">
<rect class="nj-heat-1" x="409" y="117" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="138" text-anchor="middle">1.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;2.09× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 634 µs&#10;citm_catalog.json: 1,264 µs&#10;canada.json: 4,379 µs&#10;jeopardy.json: 140,693 µs">
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">2.09</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.93× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 546 µs&#10;citm_catalog.json: 1,139 µs&#10;canada.json: 4,366 µs&#10;jeopardy.json: 64,830 µs">
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.93</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;2.37× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 214 µs&#10;citm_catalog.json: 454 µs&#10;canada.json: 2,414 µs&#10;jeopardy.json: 33,358 µs">
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">2.37</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.46× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 221 µs&#10;citm_catalog.json: 493 µs&#10;canada.json: 2,104 µs&#10;jeopardy.json: 27,311 µs">
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.46</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.24× the time of the fastest library (fully validating)&#10;twitter.json: 256 µs · On-Demand&#10;citm_catalog.json: 608 µs · On-Demand&#10;canada.json: 2,594 µs · D&#8203;OM&#10;jeopardy.json: 33,706 µs · D&#8203;OM">
<rect class="nj-heat-1" x="317" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.24</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.48× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 231 µs&#10;citm_catalog.json: 510 µs&#10;canada.json: 2,104 µs&#10;jeopardy.json: 32,075 µs">
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.48</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.85× the time of the fastest fully validating library&#10;way: On-Demand&#10;twitter.json: 144 µs&#10;citm_catalog.json: 500 µs&#10;canada.json: 646 µs&#10;jeopardy.json: 18,601 µs&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.85</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.75× the time of the fastest fully validating library&#10;twitter.json: 126 µs · On-Demand structs&#10;citm_catalog.json: 352 µs · On-Demand&#10;canada.json: 564 µs · On-Demand (key selectors)&#10;jeopardy.json: 19,313 µs · On-Demand&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<rect class="nj-heat-0" x="455" y="117" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="132" text-anchor="middle">0.75</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="145" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit&#10;simdjson&#x27;s documents are read-only: it has no A&#8203;PI to change a value and write the result">
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-tick" x="546" y="174">n/a</text>
<rect class="nj-heat-na" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-tick" x="546" y="138">n/a</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;2.41× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 590 µs&#10;citm_catalog.json: 990 µs&#10;canada.json: 8,949 µs&#10;jeopardy.json: 82,232 µs">
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">2.41</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;2.06× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 567 µs&#10;citm_catalog.json: 920 µs&#10;canada.json: 5,026 µs&#10;jeopardy.json: 81,800 µs">
<rect class="nj-heat-2" x="593" y="117" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="138" text-anchor="middle">2.06</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.19× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 65.0 µs&#10;citm_catalog.json: 178 µs&#10;canada.json: 236 µs&#10;jeopardy.json: 5,929 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.19</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.18× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 61.3 µs&#10;citm_catalog.json: 168 µs&#10;canada.json: 228 µs&#10;jeopardy.json: 5,682 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="117" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="132" text-anchor="middle">0.18</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="145" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;4.02× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 352 µs&#10;citm_catalog.json: 494 µs&#10;canada.json: 6,770 µs&#10;jeopardy.json: 54,528 µs">
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">4.02</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;3.26× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 342 µs&#10;citm_catalog.json: 450 µs&#10;canada.json: 3,141 µs&#10;jeopardy.json: 52,878 µs">
<rect class="nj-heat-3" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">3.26</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">simd-json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;1.95× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 304 µs&#10;citm_catalog.json: 709 µs&#10;canada.json: 2,286 µs&#10;jeopardy.json: 39,592 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.77× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 326 µs&#10;citm_catalog.json: 681 µs&#10;canada.json: 1,939 µs&#10;jeopardy.json: 31,450 µs">
<rect class="nj-heat-2" x="225" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.77</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.54× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 364 µs&#10;citm_catalog.json: 778 µs&#10;canada.json: 2,703 µs&#10;jeopardy.json: 41,361 µs">
<rect class="nj-heat-2" x="317" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.54</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.85× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 333 µs&#10;citm_catalog.json: 691 µs&#10;canada.json: 1,936 µs&#10;jeopardy.json: 40,660 µs">
<rect class="nj-heat-2" x="409" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="174" text-anchor="middle">1.85</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;2.11× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 634 µs&#10;citm_catalog.json: 1,257 µs&#10;canada.json: 4,396 µs&#10;jeopardy.json: 140,936 µs">
<rect class="nj-heat-2" x="501" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="174" text-anchor="middle">2.11</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.95× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 535 µs&#10;citm_catalog.json: 1,134 µs&#10;canada.json: 4,377 µs&#10;jeopardy.json: 64,832 µs">
<rect class="nj-heat-2" x="593" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="174" text-anchor="middle">1.95</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;2.41× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 212 µs&#10;citm_catalog.json: 446 µs&#10;canada.json: 2,419 µs&#10;jeopardy.json: 33,366 µs">
<rect class="nj-heat-2" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.41</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;2.31× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 379 µs&#10;citm_catalog.json: 982 µs&#10;canada.json: 2,575 µs&#10;jeopardy.json: 40,691 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="225" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="210" text-anchor="middle">1.95</text>
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">2.31</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.65× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 372 µs&#10;citm_catalog.json: 866 µs&#10;canada.json: 2,727 µs&#10;jeopardy.json: 48,506 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.85× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 428 µs&#10;citm_catalog.json: 1,083 µs&#10;canada.json: 2,956 µs&#10;jeopardy.json: 48,064 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="317" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="210" text-anchor="middle">1.65</text>
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.85</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.35× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 375 µs&#10;citm_catalog.json: 871 µs&#10;canada.json: 2,660 µs&#10;jeopardy.json: 57,877 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;2.32× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 384 µs&#10;citm_catalog.json: 989 µs&#10;canada.json: 2,580 µs&#10;jeopardy.json: 45,320 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="409" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="210" text-anchor="middle">2.35</text>
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">2.32</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;2.84× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 934 µs&#10;citm_catalog.json: 2,111 µs&#10;canada.json: 7,695 µs&#10;jeopardy.json: 111,832 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="210" text-anchor="middle">2.84</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.70× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 481 µs&#10;citm_catalog.json: 1,220 µs&#10;canada.json: 5,623 µs&#10;jeopardy.json: 62,390 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.70</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.39× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 959 µs&#10;citm_catalog.json: 2,097 µs&#10;canada.json: 7,743 µs&#10;jeopardy.json: 107,444 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="210" text-anchor="middle">3.39</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;2.04× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 495 µs&#10;citm_catalog.json: 1,218 µs&#10;canada.json: 5,628 µs&#10;jeopardy.json: 60,548 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">2.04</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;3.13× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 364 µs&#10;citm_catalog.json: 496 µs&#10;canada.json: 2,723 µs&#10;jeopardy.json: 48,114 µs">
<rect class="nj-heat-3" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">3.13</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.62× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 110 µs&#10;citm_catalog.json: 232 µs&#10;canada.json: 3,038 µs&#10;jeopardy.json: 20,165 µs">
<rect class="nj-heat-2" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.62</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;2.33× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 380 µs&#10;citm_catalog.json: 982 µs&#10;canada.json: 2,577 µs&#10;jeopardy.json: 41,571 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">simd-json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;1.90× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 289 µs&#10;citm_catalog.json: 698 µs&#10;canada.json: 2,278 µs&#10;jeopardy.json: 38,874 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="240" text-anchor="middle">2.33</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="253" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.90</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.85× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 427 µs&#10;citm_catalog.json: 1,091 µs&#10;canada.json: 2,976 µs&#10;jeopardy.json: 48,840 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.63× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 354 µs&#10;citm_catalog.json: 866 µs&#10;canada.json: 2,717 µs&#10;jeopardy.json: 47,518 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="317" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="240" text-anchor="middle">1.85</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="253" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.63</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;2.30× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 385 µs&#10;citm_catalog.json: 992 µs&#10;canada.json: 2,590 µs&#10;jeopardy.json: 46,922 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.40× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 364 µs&#10;citm_catalog.json: 914 µs&#10;canada.json: 2,657 µs&#10;jeopardy.json: 57,697 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="240" text-anchor="middle">2.30</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="253" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">2.40</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.70× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 490 µs&#10;citm_catalog.json: 1,227 µs&#10;canada.json: 5,655 µs&#10;jeopardy.json: 63,940 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="240" text-anchor="middle">1.70</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="253" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;2.87× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 948 µs&#10;citm_catalog.json: 2,102 µs&#10;canada.json: 7,654 µs&#10;jeopardy.json: 110,693 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.87</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;2.02× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 497 µs&#10;citm_catalog.json: 1,219 µs&#10;canada.json: 5,658 µs&#10;jeopardy.json: 61,948 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-2" x="593" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="240" text-anchor="middle">2.02</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="253" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.43× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 952 µs&#10;citm_catalog.json: 2,111 µs&#10;canada.json: 7,658 µs&#10;jeopardy.json: 108,130 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">3.43</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.59× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 111 µs&#10;citm_catalog.json: 231 µs&#10;canada.json: 3,047 µs&#10;jeopardy.json: 20,342 µs">
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">1.59</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;3.14× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 355 µs&#10;citm_catalog.json: 478 µs&#10;canada.json: 2,728 µs&#10;jeopardy.json: 47,412 µs">
<rect class="nj-heat-3" x="685" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">3.14</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">Glaze</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.88× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 329 µs&#10;citm_catalog.json: 853 µs&#10;canada.json: 1,302 µs&#10;jeopardy.json: 46,471 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.86× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 329 µs&#10;citm_catalog.json: 854 µs&#10;canada.json: 1,302 µs&#10;jeopardy.json: 44,972 µs">
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">1.88</text>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">1.86</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;5.58× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 1,323 µs&#10;citm_catalog.json: 2,845 µs&#10;canada.json: 9,777 µs&#10;jeopardy.json: 151,441 µs">
<rect class="nj-heat-4" x="317" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">5.58</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;3.85× the time of the fastest library (fully validating)&#10;way: generic (double, strict)&#10;twitter.json: 977 µs&#10;citm_catalog.json: 2,068 µs&#10;canada.json: 6,254 µs&#10;jeopardy.json: 98,851 µs">
<rect class="nj-heat-3" x="317" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">3.85</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.82× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 312 µs&#10;citm_catalog.json: 873 µs&#10;canada.json: 1,304 µs&#10;jeopardy.json: 51,046 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.79× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 311 µs&#10;citm_catalog.json: 848 µs&#10;canada.json: 1,302 µs&#10;jeopardy.json: 45,909 µs">
<rect class="nj-heat-2" x="409" y="261" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="282" text-anchor="middle">1.82</text>
<text class="nj-charts-cell" x="431.5" y="282" text-anchor="middle">1.79</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.83× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 238 µs&#10;citm_catalog.json: 252 µs&#10;canada.json: 316 µs&#10;jeopardy.json: 41,037 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.82× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 239 µs&#10;citm_catalog.json: 253 µs&#10;canada.json: 310 µs&#10;jeopardy.json: 36,348 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<rect class="nj-heat-0" x="455" y="261" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="276" text-anchor="middle">0.83</text>
<text class="nj-charts-cell" x="476.5" y="276" text-anchor="middle">0.82</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="289" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;4.44× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 1,503 µs&#10;citm_catalog.json: 3,223 µs&#10;canada.json: 11,125 µs&#10;jeopardy.json: 187,294 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;4.42× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 1,526 µs&#10;citm_catalog.json: 3,206 µs&#10;canada.json: 10,930 µs&#10;jeopardy.json: 177,272 µs">
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">4.44</text>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">4.42</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;5.18× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 1,488 µs&#10;citm_catalog.json: 3,208 µs&#10;canada.json: 11,076 µs&#10;jeopardy.json: 172,917 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;5.21× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 1,501 µs&#10;citm_catalog.json: 3,179 µs&#10;canada.json: 10,937 µs&#10;jeopardy.json: 168,733 µs">
<rect class="nj-heat-4" x="593" y="261" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="282" text-anchor="middle">5.18</text>
<text class="nj-charts-cell" x="615.5" y="282" text-anchor="middle">5.21</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;1.04× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 283 µs&#10;citm_catalog.json: 740 µs&#10;canada.json: 1,808 µs&#10;jeopardy.json: 39,976 µs&#10;minify_json only removes whitespace, without parsing the values">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;1.03× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 279 µs&#10;citm_catalog.json: 726 µs&#10;canada.json: 1,705 µs&#10;jeopardy.json: 39,268 µs&#10;minify_json only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="261" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="276" text-anchor="middle">1.04</text>
<text class="nj-charts-cell" x="660.5" y="276" text-anchor="middle">1.03</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="289" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;2.21× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 212 µs&#10;citm_catalog.json: 469 µs&#10;canada.json: 1,692 µs&#10;jeopardy.json: 34,921 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;2.24× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 210 µs&#10;citm_catalog.json: 469 µs&#10;canada.json: 1,696 µs&#10;jeopardy.json: 33,710 µs">
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.21</text>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.24</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">Boost.J&#8203;SON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;2.87× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 536 µs&#10;citm_catalog.json: 1,017 µs&#10;canada.json: 3,065 µs&#10;jeopardy.json: 55,102 µs">
<rect class="nj-heat-3" x="225" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="318" text-anchor="middle">2.87</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;2.34× the time of the fastest library (fully validating)&#10;way: S&#8203;AX (numbers: none)&#10;twitter.json: 530 µs&#10;citm_catalog.json: 991 µs&#10;canada.json: 1,466 µs&#10;jeopardy.json: 53,807 µs">
<rect class="nj-heat-2" x="225" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="318" text-anchor="middle">2.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;2.00× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 537 µs&#10;citm_catalog.json: 1,020 µs&#10;canada.json: 3,046 µs&#10;jeopardy.json: 54,818 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.98× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 533 µs&#10;citm_catalog.json: 1,005 µs&#10;canada.json: 3,029 µs&#10;jeopardy.json: 53,595 µs">
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.00</text>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">1.98</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;4.09× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 889 µs&#10;citm_catalog.json: 1,490 µs&#10;canada.json: 3,632 µs&#10;jeopardy.json: 96,757 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;3.29× the time of the fastest library (fully validating)&#10;twitter.json: 620 µs · parse_into structs&#10;citm_catalog.json: 1,206 µs · parse_into structs&#10;canada.json: 3,619 µs · parse&#10;jeopardy.json: 66,538 µs · parse_into structs">
<rect class="nj-heat-3" x="409" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">4.09</text>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">3.29</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;3.23× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,367 µs&#10;citm_catalog.json: 1,999 µs&#10;canada.json: 6,542 µs&#10;jeopardy.json: 157,555 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;3.24× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,363 µs&#10;citm_catalog.json: 1,995 µs&#10;canada.json: 6,500 µs&#10;jeopardy.json: 154,406 µs">
<rect class="nj-heat-3" x="501" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">3.23</text>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">3.24</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;3.86× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,391 µs&#10;citm_catalog.json: 1,987 µs&#10;canada.json: 6,586 µs&#10;jeopardy.json: 154,714 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;3.87× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,378 µs&#10;citm_catalog.json: 1,984 µs&#10;canada.json: 6,505 µs&#10;jeopardy.json: 151,127 µs">
<rect class="nj-heat-3" x="593" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">3.86</text>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">3.87</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;3.68× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 499 µs&#10;citm_catalog.json: 503 µs&#10;canada.json: 2,868 µs&#10;jeopardy.json: 62,964 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;3.75× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 498 µs&#10;citm_catalog.json: 501 µs&#10;canada.json: 2,876 µs&#10;jeopardy.json: 62,385 µs">
<rect class="nj-heat-3" x="685" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">3.68</text>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">3.75</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">serde_json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;2.28× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 457 µs&#10;citm_catalog.json: 1,105 µs&#10;canada.json: 1,532 µs&#10;jeopardy.json: 47,547 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;2.26× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 452 µs&#10;citm_catalog.json: 1,103 µs&#10;canada.json: 1,556 µs&#10;jeopardy.json: 46,517 µs">
<rect class="nj-heat-2" x="225" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="354" text-anchor="middle">2.28</text>
<text class="nj-charts-cell" x="247.5" y="354" text-anchor="middle">2.26</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;2.06× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 354 µs&#10;citm_catalog.json: 1,052 µs&#10;canada.json: 1,459 µs&#10;jeopardy.json: 44,881 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;2.05× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 354 µs&#10;citm_catalog.json: 1,047 µs&#10;canada.json: 1,451 µs&#10;jeopardy.json: 44,984 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<rect class="nj-heat-2" x="271" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="348" text-anchor="middle">2.06</text>
<text class="nj-charts-cell" x="292.5" y="348" text-anchor="middle">2.05</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="361" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.59× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 665 µs&#10;citm_catalog.json: 1,229 µs&#10;canada.json: 4,813 µs&#10;jeopardy.json: 66,093 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.60× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 652 µs&#10;citm_catalog.json: 1,242 µs&#10;canada.json: 4,772 µs&#10;jeopardy.json: 66,568 µs">
<rect class="nj-heat-3" x="317" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="354" text-anchor="middle">2.59</text>
<text class="nj-charts-cell" x="362" y="354" text-anchor="middle">2.60</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;2.38× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 483 µs&#10;citm_catalog.json: 1,121 µs&#10;canada.json: 1,532 µs&#10;jeopardy.json: 63,635 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;2.42× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 480 µs&#10;citm_catalog.json: 1,125 µs&#10;canada.json: 1,560 µs&#10;jeopardy.json: 62,378 µs">
<rect class="nj-heat-2" x="409" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">2.38</text>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">2.42</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select, checking less&#10;2.24× the time of the fastest fully validating library&#10;twitter.json: 416 µs · structs&#10;citm_catalog.json: 1,082 µs · structs&#10;canada.json: 1,458 µs · structs&#10;jeopardy.json: 63,635 µs · from_utf8 + structs (validates fully)&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select, checking less&#10;2.27× the time of the fastest fully validating library&#10;twitter.json: 410 µs · structs&#10;citm_catalog.json: 1,084 µs · structs&#10;canada.json: 1,455 µs · structs&#10;jeopardy.json: 62,378 µs · from_utf8 + structs (validates fully)&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<rect class="nj-heat-2" x="455" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">2.24</text>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">2.27</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;4.97× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 2,001 µs&#10;citm_catalog.json: 3,287 µs&#10;canada.json: 9,670 µs&#10;jeopardy.json: 248,681 µs">
<rect class="nj-heat-3" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">4.97</text>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;5.06× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 2,009 µs&#10;citm_catalog.json: 3,316 µs&#10;canada.json: 9,666 µs&#10;jeopardy.json: 251,931 µs">
<rect class="nj-heat-4" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">5.06</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.80× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,999 µs&#10;citm_catalog.json: 3,240 µs&#10;canada.json: 9,748 µs&#10;jeopardy.json: 227,301 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.92× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 2,004 µs&#10;citm_catalog.json: 3,290 µs&#10;canada.json: 9,792 µs&#10;jeopardy.json: 227,369 µs">
<rect class="nj-heat-4" x="593" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="354" text-anchor="middle">5.80</text>
<text class="nj-charts-cell" x="638" y="354" text-anchor="middle">5.92</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.95× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 327 µs&#10;citm_catalog.json: 504 µs&#10;canada.json: 2,257 µs&#10;jeopardy.json: 49,857 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.99× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 322 µs&#10;citm_catalog.json: 490 µs&#10;canada.json: 2,286 µs&#10;jeopardy.json: 49,967 µs">
<rect class="nj-heat-3" x="685" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">2.95</text>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">2.99</text>
</g>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="390" text-anchor="end">nlohmann/json json</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;2.65× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 481 µs&#10;citm_catalog.json: 897 µs&#10;canada.json: 2,463 µs&#10;jeopardy.json: 63,383 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;2.64× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 471 µs&#10;citm_catalog.json: 907 µs&#10;canada.json: 2,510 µs&#10;jeopardy.json: 62,074 µs">
<rect class="nj-heat-3" x="225" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">2.65</text>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">2.64</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.96× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 461 µs&#10;citm_catalog.json: 928 µs&#10;canada.json: 3,100 µs&#10;jeopardy.json: 63,272 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.96× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 461 µs&#10;citm_catalog.json: 930 µs&#10;canada.json: 3,127 µs&#10;jeopardy.json: 62,756 µs">
<rect class="nj-heat-2" x="317" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="390" text-anchor="middle">1.96</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;6.83× the time of the fastest library (fully validating)&#10;twitter.json: 1,357 µs · structs (from_json)&#10;citm_catalog.json: 2,439 µs · structs (from_json)&#10;canada.json: 6,066 µs · structs (from_json)&#10;jeopardy.json: 179,366 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;6.94× the time of the fastest library (fully validating)&#10;twitter.json: 1,368 µs · structs (from_json)&#10;citm_catalog.json: 2,435 µs · parse&#10;canada.json: 5,915 µs · structs (from_json)&#10;jeopardy.json: 180,551 µs · parse">
<rect class="nj-heat-4" x="409" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">6.83</text>
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">6.94</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;3.58× the time of the fastest library (fully validating)&#10;twitter.json: 1,269 µs · ordered_json&#10;citm_catalog.json: 2,376 µs · ordered_json&#10;canada.json: 8,194 µs · parse&#10;jeopardy.json: 173,089 µs · ordered_json">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;3.61× the time of the fastest library (fully validating)&#10;twitter.json: 1,270 µs · ordered_json&#10;citm_catalog.json: 2,337 µs · ordered_json&#10;canada.json: 8,183 µs · parse&#10;jeopardy.json: 173,044 µs · ordered_json">
<rect class="nj-heat-3" x="501" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">3.58</text>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">3.61</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;4.87× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 1,592 µs&#10;citm_catalog.json: 2,694 µs&#10;canada.json: 8,280 µs&#10;jeopardy.json: 200,923 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;4.95× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 1,599 µs&#10;citm_catalog.json: 2,716 µs&#10;canada.json: 8,185 µs&#10;jeopardy.json: 201,407 µs">
<rect class="nj-heat-3" x="593" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">4.87</text>
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">4.95</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;2.05× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 220 µs&#10;citm_catalog.json: 286 µs&#10;canada.json: 2,240 µs&#10;jeopardy.json: 30,983 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;2.09× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 216 µs&#10;citm_catalog.json: 287 µs&#10;canada.json: 2,235 µs&#10;jeopardy.json: 31,197 µs">
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">2.05</text>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">2.09</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="426" text-anchor="end">RapidJSON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;6.21× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,314 µs&#10;citm_catalog.json: 1,568 µs&#10;canada.json: 6,871 µs&#10;jeopardy.json: 142,654 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;6.13× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,311 µs&#10;citm_catalog.json: 1,568 µs&#10;canada.json: 6,787 µs&#10;jeopardy.json: 139,323 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-4" x="225" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">6.21</text>
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">6.13</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;4.04× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 704 µs&#10;citm_catalog.json: 1,150 µs&#10;canada.json: 6,851 µs&#10;jeopardy.json: 65,584 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.96× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 695 µs&#10;citm_catalog.json: 1,145 µs&#10;canada.json: 6,742 µs&#10;jeopardy.json: 63,152 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="271" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">4.04</text>
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.96</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;4.45× the time of the fastest library (fully validating)&#10;twitter.json: 1,331 µs · S&#8203;AX&#10;citm_catalog.json: 1,626 µs · S&#8203;AX&#10;canada.json: 6,924 µs · S&#8203;AX&#10;jeopardy.json: 149,474 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;4.41× the time of the fastest library (fully validating)&#10;twitter.json: 1,311 µs · S&#8203;AX&#10;citm_catalog.json: 1,623 µs · S&#8203;AX&#10;canada.json: 6,913 µs · S&#8203;AX&#10;jeopardy.json: 145,744 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="317" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">4.45</text>
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">4.41</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;3.02× the time of the fastest fully validating library&#10;twitter.json: 755 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,258 µs · insitu (copy) (no encoding check)&#10;canada.json: 6,924 µs · S&#8203;AX (validates fully)&#10;jeopardy.json: 72,381 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.99× the time of the fastest fully validating library&#10;twitter.json: 742 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,256 µs · insitu (copy) (no encoding check)&#10;canada.json: 6,913 µs · S&#8203;AX (validates fully)&#10;jeopardy.json: 70,079 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="363" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">3.02</text>
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.99</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;5.90× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,319 µs&#10;citm_catalog.json: 1,572 µs&#10;canada.json: 6,762 µs&#10;jeopardy.json: 142,740 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;6.00× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,314 µs&#10;citm_catalog.json: 1,574 µs&#10;canada.json: 6,750 µs&#10;jeopardy.json: 141,640 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-4" x="409" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">5.90</text>
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">6.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.85× the time of the fastest fully validating library&#10;twitter.json: 703 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,146 µs · insitu (copy) (no encoding check)&#10;canada.json: 6,762 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 66,763 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.90× the time of the fastest fully validating library&#10;twitter.json: 697 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,148 µs · insitu (copy) (no encoding check)&#10;canada.json: 6,750 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 65,799 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="455" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.85</text>
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.90</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;4.85× the time of the fastest library (fully validating)&#10;twitter.json: 1,917 µs · Document&#10;citm_catalog.json: 2,404 µs · insitu (copy)&#10;canada.json: 13,880 µs · insitu (copy)&#10;jeopardy.json: 224,650 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;4.86× the time of the fastest library (fully validating)&#10;twitter.json: 1,914 µs · Document&#10;citm_catalog.json: 2,399 µs · insitu (copy)&#10;canada.json: 13,711 µs · insitu (copy)&#10;jeopardy.json: 220,629 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">4.85</text>
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">4.86</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;3.82× the time of the fastest fully validating library&#10;twitter.json: 1,349 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,987 µs · insitu (copy) (no encoding check)&#10;canada.json: 13,880 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 148,239 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;3.82× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 1,350 µs&#10;citm_catalog.json: 1,974 µs&#10;canada.json: 13,706 µs&#10;jeopardy.json: 144,275 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="547" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">3.82</text>
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;4.85× the time of the fastest library (fully validating)&#10;twitter.json: 1,497 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 1,797 µs · S&#8203;AX to Writer&#10;canada.json: 14,455 µs · Document + Writer&#10;jeopardy.json: 181,502 µs · S&#8203;AX to Writer">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;4.90× the time of the fastest library (fully validating)&#10;twitter.json: 1,499 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 1,797 µs · S&#8203;AX to Writer&#10;canada.json: 14,205 µs · Document + Writer&#10;jeopardy.json: 180,015 µs · S&#8203;AX to Writer">
<rect class="nj-heat-3" x="593" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">4.85</text>
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">4.90</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;4.54× the time of the fastest fully validating library&#10;twitter.json: 1,310 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 1,699 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 14,455 µs · Document + Writer (validates fully)&#10;jeopardy.json: 167,920 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;4.55× the time of the fastest fully validating library&#10;twitter.json: 1,300 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 1,697 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 14,205 µs · Document + Writer (validates fully)&#10;jeopardy.json: 164,086 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<rect class="nj-heat-3" x="639" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">4.54</text>
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">4.55</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;5.78× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 592 µs&#10;citm_catalog.json: 818 µs&#10;canada.json: 6,947 µs&#10;jeopardy.json: 81,580 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;5.86× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 593 µs&#10;citm_catalog.json: 818 µs&#10;canada.json: 6,872 µs&#10;jeopardy.json: 79,758 µs">
<rect class="nj-heat-4" x="685" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">5.78</text>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">5.86</text>
</g>
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

@@ -1,6 +1,6 @@
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-x86-clang nj-blog-uc-x86-clang-d" xmlns="http://www.w3.org/2000/svg">
<title id="nj-blog-uc-x86-clang">Use cases: time of each library relative to the fastest, x86-64 with Clang 23</title>
<desc id="nj-blog-uc-x86-clang-d">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; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.40; yyjson sum: 1.14; yyjson select: 1.38; yyjson edit: 1.50; yyjson minify: 1.28; yyjson write: 1.18; sonic-rs (Rust) validate: 1.15; sonic-rs (Rust) sum: 1.05; sonic-rs (Rust) select: 1.33; sonic-rs (Rust) edit: 1.90; sonic-rs (Rust) minify: 1.73; sonic-rs (Rust) write: 2.00; simdjson validate: 1.29; simdjson sum: 1.10; simdjson select: 1.29 (0.61 checking less, partial); simdjson edit: n/a; simdjson minify: 2.06 (0.19 checking less, partial); simdjson write: 3.18; sonic-cpp validate: no fully validating way (1.46 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.18 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (1.43 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.18 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (1.37 checking less, no U&#8203;TF-8); sonic-cpp write: 1.37; Boost.J&#8203;SON validate: 1.58; Boost.J&#8203;SON sum: 1.10; Boost.J&#8203;SON select: 3.00; Boost.J&#8203;SON edit: 2.30; Boost.J&#8203;SON minify: 2.69; Boost.J&#8203;SON write: 2.36; simd-json (Rust) validate: 2.22; simd-json (Rust) sum: 1.83; simd-json (Rust) select: 2.54; simd-json (Rust) edit: 3.05; simd-json (Rust) minify: 3.42; simd-json (Rust) write: 2.24; serde_json (Rust) validate: 1.47 (1.31 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.18; serde_json (Rust) select: 1.69; serde_json (Rust) edit: 5.01; serde_json (Rust) minify: 5.25; serde_json (Rust) write: 2.19; nlohmann/json json validate: 1.94; nlohmann/json json sum: 1.49; nlohmann/json json select: 7.92; nlohmann/json json edit: 4.24; nlohmann/json json minify: 5.30; nlohmann/json json write: 1.92; Glaze validate: 1.40; Glaze sum: 7.35 (5.04 checking less, partial); Glaze select: 1.35 (0.61 checking less, partial); Glaze edit: 6.32; Glaze minify: 6.39 (0.69 checking less, partial); Glaze write: 2.03; RapidJSON validate: 4.31 (3.29 checking less, no U&#8203;TF-8); RapidJSON sum: 3.16 (2.42 checking less, no U&#8203;TF-8); RapidJSON select: 4.32 (3.40 checking less, no U&#8203;TF-8); RapidJSON edit: 3.16 (2.69 checking less, no U&#8203;TF-8); RapidJSON minify: 3.48 (2.90 checking less, no U&#8203;TF-8); RapidJSON write: 2.93.</desc>
<desc id="nj-blog-uc-x86-clang-d">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; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.32; yyjson sum: 1.16; yyjson select: 1.31; yyjson edit: 1.48; yyjson minify: 1.26; yyjson write: 1.17; sonic-cpp validate: no fully validating way (1.42 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.20 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (1.46 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.22 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (1.35 checking less, no U&#8203;TF-8); sonic-cpp write: 1.37; simdjson validate: 1.28; simdjson sum: 1.11; simdjson select: 1.27 (0.53 checking less, partial); simdjson edit: n/a; simdjson minify: 1.65 (0.19 checking less, partial); simdjson write: 2.29; sonic-rs (Rust) validate: 1.15; sonic-rs (Rust) sum: 1.04; sonic-rs (Rust) select: 1.31; sonic-rs (Rust) edit: 1.98; sonic-rs (Rust) minify: 1.75; sonic-rs (Rust) write: 2.01; Boost.J&#8203;SON validate: 1.11; Boost.J&#8203;SON sum: 1.11; Boost.J&#8203;SON select: 2.17; Boost.J&#8203;SON edit: 2.38; Boost.J&#8203;SON minify: 2.58; Boost.J&#8203;SON write: 2.37; simd-json (Rust) validate: 2.15; simd-json (Rust) sum: 1.78; simd-json (Rust) select: 2.56; simd-json (Rust) edit: 3.13; simd-json (Rust) minify: 3.50; simd-json (Rust) write: 2.23; serde_json (Rust) validate: 1.43 (1.29 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.17; serde_json (Rust) select: 1.70; serde_json (Rust) edit: 5.10; serde_json (Rust) minify: 5.33; serde_json (Rust) write: 2.19; Glaze validate: 1.39; Glaze sum: 4.30 (3.92 checking less, partial); Glaze select: 1.31 (0.58 checking less, partial); Glaze edit: 6.15; Glaze minify: 6.27 (0.68 checking less, partial); Glaze write: 1.97; nlohmann/json json validate: 1.88; nlohmann/json json sum: 1.47; nlohmann/json json select: 7.96; nlohmann/json json edit: 4.27; nlohmann/json json minify: 5.24; nlohmann/json json write: 1.91; RapidJSON validate: 4.14 (3.17 checking less, no U&#8203;TF-8); RapidJSON sum: 3.24 (2.50 checking less, no U&#8203;TF-8); RapidJSON select: 4.27 (3.38 checking less, no U&#8203;TF-8); RapidJSON edit: 3.24 (2.73 checking less, no U&#8203;TF-8); RapidJSON minify: 3.45 (2.85 checking less, no U&#8203;TF-8); RapidJSON write: 2.94.</desc>
<text class="nj-charts-tick" x="270" y="34">validate</text>
<text class="nj-charts-tick" x="362" y="34">sum</text>
<text class="nj-charts-tick" x="454" y="34">select</text>
@@ -8,339 +8,339 @@
<text class="nj-charts-tick" x="638" y="34">minify</text>
<text class="nj-charts-tick" x="730" y="34">write</text>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 302 µs&#10;citm_catalog.json: 720 µs&#10;canada.json: 1,784 µs&#10;jeopardy.json: 81,370 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 305 µs · parse&#10;citm_catalog.json: 715 µs · accept&#10;canada.json: 2,019 µs · accept&#10;jeopardy.json: 83,361 µs · parse">
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 378 µs&#10;citm_catalog.json: 891 µs&#10;canada.json: 4,151 µs&#10;jeopardy.json: 89,689 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 373 µs&#10;citm_catalog.json: 893 µs&#10;canada.json: 4,353 µs&#10;jeopardy.json: 89,554 µs">
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 324 µs · parse&#10;citm_catalog.json: 728 µs · parse&#10;canada.json: 1,784 µs · structs (from_json)&#10;jeopardy.json: 89,731 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 324 µs&#10;citm_catalog.json: 729 µs&#10;canada.json: 1,795 µs&#10;jeopardy.json: 94,289 µs">
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 534 µs&#10;citm_catalog.json: 1,100 µs&#10;canada.json: 5,935 µs&#10;jeopardy.json: 208,247 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 523 µs&#10;citm_catalog.json: 1,093 µs&#10;canada.json: 6,109 µs&#10;jeopardy.json: 179,999 µs">
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 474 µs&#10;citm_catalog.json: 993 µs&#10;canada.json: 5,445 µs&#10;jeopardy.json: 153,155 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 472 µs&#10;citm_catalog.json: 993 µs&#10;canada.json: 5,467 µs&#10;jeopardy.json: 152,456 µs">
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 152 µs&#10;citm_catalog.json: 272 µs&#10;canada.json: 3,634 µs&#10;jeopardy.json: 68,840 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 152 µs&#10;citm_catalog.json: 272 µs&#10;canada.json: 3,724 µs&#10;jeopardy.json: 69,602 µs">
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.40× the time of the fastest library (fully validating)&#10;twitter.json: 379 µs · insitu (copy)&#10;citm_catalog.json: 896 µs · read&#10;canada.json: 2,851 µs · insitu (copy)&#10;jeopardy.json: 124,180 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.32× the time of the fastest library (fully validating)&#10;twitter.json: 380 µs · read&#10;citm_catalog.json: 918 µs · insitu (copy)&#10;canada.json: 2,533 µs · read (raw numbers)&#10;jeopardy.json: 126,565 µs · read (raw numbers)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="225" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.40</text>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.32</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.14× the time of the fastest library (fully validating)&#10;twitter.json: 435 µs · insitu (copy)&#10;citm_catalog.json: 1,048 µs · insitu (copy)&#10;canada.json: 3,467 µs · insitu (copy)&#10;jeopardy.json: 135,382 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-0" x="317" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.14</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.16× the time of the fastest library (fully validating)&#10;twitter.json: 437 µs · read&#10;citm_catalog.json: 1,091 µs · insitu (copy)&#10;canada.json: 3,587 µs · insitu (copy)&#10;jeopardy.json: 135,079 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="317" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.16</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.38× the time of the fastest library (fully validating)&#10;twitter.json: 387 µs · insitu (copy)&#10;citm_catalog.json: 900 µs · insitu (copy)&#10;canada.json: 2,814 µs · read&#10;jeopardy.json: 139,634 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.31× the time of the fastest library (fully validating)&#10;twitter.json: 395 µs · insitu (copy)&#10;citm_catalog.json: 934 µs · insitu (copy)&#10;canada.json: 2,374 µs · read (raw numbers)&#10;jeopardy.json: 135,642 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.38</text>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.31</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.50× the time of the fastest library (fully validating)&#10;twitter.json: 912 µs · mut copy&#10;citm_catalog.json: 1,686 µs · mut copy&#10;canada.json: 7,407 µs · mut copy&#10;jeopardy.json: 318,770 µs · insitu (copy) + mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.48× the time of the fastest library (fully validating)&#10;twitter.json: 816 µs · mut copy&#10;citm_catalog.json: 1,710 µs · insitu (copy) + mut copy&#10;canada.json: 7,258 µs · mut copy&#10;jeopardy.json: 296,347 µs · mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="501" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.50</text>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.48</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.28× the time of the fastest library (fully validating)&#10;twitter.json: 625 µs · insitu (copy) + write&#10;citm_catalog.json: 1,256 µs · read + write&#10;canada.json: 6,261 µs · read + write&#10;jeopardy.json: 212,043 µs · insitu (copy) + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.26× the time of the fastest library (fully validating)&#10;twitter.json: 626 µs · read + write&#10;citm_catalog.json: 1,290 µs · read + write&#10;canada.json: 6,113 µs · insitu (copy) + write&#10;jeopardy.json: 196,773 µs · insitu (copy) + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.28</text>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.26</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.18× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 219 µs&#10;citm_catalog.json: 364 µs&#10;canada.json: 3,380 µs&#10;jeopardy.json: 75,136 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.17× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 215 µs&#10;citm_catalog.json: 350 µs&#10;canada.json: 3,419 µs&#10;jeopardy.json: 78,246 µs">
<rect class="nj-heat-1" x="685" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.18</text>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.17</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.15× the time of the fastest library (fully validating)&#10;way: IgnoredAny&#10;twitter.json: 470 µs&#10;citm_catalog.json: 966 µs&#10;canada.json: 2,249 µs&#10;jeopardy.json: 54,246 µs">
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;1.42× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 450 µs&#10;citm_catalog.json: 1,007 µs&#10;canada.json: 3,351 µs&#10;jeopardy.json: 99,056 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="225" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.15</text>
<text class="nj-charts-cell" x="270" y="132" text-anchor="middle">1.42</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.05× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 494 µs&#10;citm_catalog.json: 1,135 µs&#10;canada.json: 4,580 µs&#10;jeopardy.json: 59,149 µs">
<rect class="nj-heat-0" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.05</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.20× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 506 µs&#10;citm_catalog.json: 1,208 µs&#10;canada.json: 4,034 µs&#10;jeopardy.json: 107,937 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="132" text-anchor="middle">1.20</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.33× the time of the fastest library (fully validating)&#10;way: structs&#10;twitter.json: 557 µs&#10;citm_catalog.json: 1,023 µs&#10;canada.json: 2,247 µs&#10;jeopardy.json: 91,996 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;1.46× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 486 µs&#10;citm_catalog.json: 1,024 µs&#10;canada.json: 3,201 µs&#10;jeopardy.json: 113,041 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="409" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.33</text>
<text class="nj-charts-cell" x="454" y="132" text-anchor="middle">1.46</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;1.90× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,189 µs&#10;citm_catalog.json: 2,384 µs&#10;canada.json: 8,007 µs&#10;jeopardy.json: 413,714 µs">
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">1.90</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.22× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 645 µs&#10;citm_catalog.json: 1,481 µs&#10;canada.json: 7,924 µs&#10;jeopardy.json: 185,114 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="132" text-anchor="middle">1.22</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.73× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 988 µs&#10;citm_catalog.json: 2,093 µs&#10;canada.json: 7,775 µs&#10;jeopardy.json: 217,697 µs">
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.73</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;1.35× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 653 µs&#10;citm_catalog.json: 1,491 µs&#10;canada.json: 7,777 µs&#10;jeopardy.json: 172,744 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="132" text-anchor="middle">1.35</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;2.00× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 442 µs&#10;citm_catalog.json: 935 µs&#10;canada.json: 3,954 µs&#10;jeopardy.json: 100,889 µs">
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">2.00</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.37× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 232 µs&#10;citm_catalog.json: 480 µs&#10;canada.json: 4,857 µs&#10;jeopardy.json: 70,286 µs">
<rect class="nj-heat-1" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.37</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.29× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 311 µs&#10;citm_catalog.json: 736 µs&#10;canada.json: 3,343 µs&#10;jeopardy.json: 115,626 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.28× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 306 µs&#10;citm_catalog.json: 713 µs&#10;canada.json: 3,652 µs&#10;jeopardy.json: 121,820 µs">
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.29</text>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.28</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.10× the time of the fastest library (fully validating)&#10;twitter.json: 399 µs · D&#8203;OM&#10;citm_catalog.json: 946 µs · D&#8203;OM&#10;canada.json: 4,100 µs · D&#8203;OM&#10;jeopardy.json: 120,056 µs · On-Demand">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.11× the time of the fastest library (fully validating)&#10;twitter.json: 396 µs · D&#8203;OM&#10;citm_catalog.json: 969 µs · D&#8203;OM&#10;canada.json: 4,454 µs · D&#8203;OM&#10;jeopardy.json: 115,048 µs · On-Demand">
<rect class="nj-heat-0" x="317" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.10</text>
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.11</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.29× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 330 µs&#10;citm_catalog.json: 743 µs&#10;canada.json: 3,291 µs&#10;jeopardy.json: 129,470 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.27× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 341 µs&#10;citm_catalog.json: 723 µs&#10;canada.json: 3,231 µs&#10;jeopardy.json: 128,975 µs">
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.29</text>
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.61× the time of the fastest fully validating library&#10;way: On-Demand&#10;twitter.json: 210 µs&#10;citm_catalog.json: 610 µs&#10;canada.json: 861 µs&#10;jeopardy.json: 48,548 µs&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.53× the time of the fastest fully validating library&#10;way: On-Demand&#10;twitter.json: 186 µs&#10;citm_catalog.json: 487 µs&#10;canada.json: 703 µs&#10;jeopardy.json: 49,244 µs&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.61</text>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.53</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit&#10;simdjson&#x27;s documents are read-only: it has no A&#8203;PI to change a value and write the result">
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-tick" x="546" y="174">n/a</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;2.06× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 857 µs&#10;citm_catalog.json: 1,543 µs&#10;canada.json: 16,516 µs&#10;jeopardy.json: 326,881 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;1.65× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 824 µs&#10;citm_catalog.json: 1,419 µs&#10;canada.json: 8,134 µs&#10;jeopardy.json: 305,008 µs">
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">2.06</text>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.65</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.19× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 103 µs&#10;citm_catalog.json: 256 µs&#10;canada.json: 373 µs&#10;jeopardy.json: 51,243 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.19× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 103 µs&#10;citm_catalog.json: 256 µs&#10;canada.json: 373 µs&#10;jeopardy.json: 47,751 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.19</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;3.18× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 551 µs&#10;citm_catalog.json: 803 µs&#10;canada.json: 12,977 µs&#10;jeopardy.json: 183,837 µs">
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">3.18</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;2.29× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 492 µs&#10;citm_catalog.json: 680 µs&#10;canada.json: 4,787 µs&#10;jeopardy.json: 183,334 µs">
<rect class="nj-heat-2" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.29</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;1.46× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 450 µs&#10;citm_catalog.json: 1,026 µs&#10;canada.json: 3,140 µs&#10;jeopardy.json: 98,200 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.15× the time of the fastest library (fully validating)&#10;way: IgnoredAny&#10;twitter.json: 482 µs&#10;citm_catalog.json: 969 µs&#10;canada.json: 2,489 µs&#10;jeopardy.json: 55,486 µs">
<rect class="nj-heat-1" x="225" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">1.46</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="270" y="210" text-anchor="middle">1.15</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.18× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 504 µs&#10;citm_catalog.json: 1,180 µs&#10;canada.json: 3,736 µs&#10;jeopardy.json: 110,324 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="317" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.18</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.04× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 503 µs&#10;citm_catalog.json: 1,123 µs&#10;canada.json: 4,418 µs&#10;jeopardy.json: 59,993 µs">
<rect class="nj-heat-0" x="317" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="210" text-anchor="middle">1.04</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;1.43× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 461 µs&#10;citm_catalog.json: 1,024 µs&#10;canada.json: 3,030 µs&#10;jeopardy.json: 109,906 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.31× the time of the fastest library (fully validating)&#10;way: structs&#10;twitter.json: 538 µs&#10;citm_catalog.json: 1,028 µs&#10;canada.json: 2,283 µs&#10;jeopardy.json: 91,950 µs">
<rect class="nj-heat-1" x="409" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">1.43</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="454" y="210" text-anchor="middle">1.31</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.18× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 644 µs&#10;citm_catalog.json: 1,508 µs&#10;canada.json: 7,972 µs&#10;jeopardy.json: 184,491 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.18</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;1.98× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,201 µs&#10;citm_catalog.json: 2,416 µs&#10;canada.json: 7,958 µs&#10;jeopardy.json: 421,718 µs">
<rect class="nj-heat-2" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="210" text-anchor="middle">1.98</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;1.37× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 647 µs&#10;citm_catalog.json: 1,487 µs&#10;canada.json: 7,924 µs&#10;jeopardy.json: 182,940 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">1.37</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.75× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,003 µs&#10;citm_catalog.json: 2,174 µs&#10;canada.json: 7,753 µs&#10;jeopardy.json: 217,354 µs">
<rect class="nj-heat-2" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="210" text-anchor="middle">1.75</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.37× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 231 µs&#10;citm_catalog.json: 475 µs&#10;canada.json: 4,851 µs&#10;jeopardy.json: 69,344 µs">
<rect class="nj-heat-1" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.37</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;2.01× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 445 µs&#10;citm_catalog.json: 931 µs&#10;canada.json: 4,048 µs&#10;jeopardy.json: 104,487 µs">
<rect class="nj-heat-2" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">2.01</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">Boost.J&#8203;SON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;1.58× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 596 µs&#10;citm_catalog.json: 923 µs&#10;canada.json: 6,234 µs&#10;jeopardy.json: 56,654 µs">
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.58</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;1.11× the time of the fastest library (fully validating)&#10;twitter.json: 568 µs · S&#8203;AX (numbers: none)&#10;citm_catalog.json: 903 µs · S&#8203;AX (numbers: none)&#10;canada.json: 1,896 µs · S&#8203;AX (numbers: none)&#10;jeopardy.json: 56,244 µs · S&#8203;AX">
<rect class="nj-heat-0" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.11</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.10× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 582 µs&#10;citm_catalog.json: 927 µs&#10;canada.json: 5,935 µs&#10;jeopardy.json: 56,310 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.11× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 582 µs&#10;citm_catalog.json: 927 µs&#10;canada.json: 6,356 µs&#10;jeopardy.json: 57,388 µs">
<rect class="nj-heat-0" x="317" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.10</text>
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.11</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;3.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,264 µs&#10;citm_catalog.json: 1,659 µs&#10;canada.json: 7,173 µs&#10;jeopardy.json: 202,456 µs">
<rect class="nj-heat-3" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">3.00</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;2.17× the time of the fastest library (fully validating)&#10;twitter.json: 850 µs · parse_into structs&#10;citm_catalog.json: 1,400 µs · parse_into structs&#10;canada.json: 7,389 µs · parse&#10;jeopardy.json: 100,054 µs · parse_into structs">
<rect class="nj-heat-2" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">2.17</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;2.30× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,722 µs&#10;citm_catalog.json: 2,614 µs&#10;canada.json: 12,953 µs&#10;jeopardy.json: 346,073 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;2.38× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,725 µs&#10;citm_catalog.json: 2,594 µs&#10;canada.json: 13,178 µs&#10;jeopardy.json: 343,065 µs">
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.30</text>
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.38</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;2.69× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,758 µs&#10;citm_catalog.json: 2,553 µs&#10;canada.json: 12,744 µs&#10;jeopardy.json: 358,018 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;2.58× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,738 µs&#10;citm_catalog.json: 2,558 µs&#10;canada.json: 12,553 µs&#10;jeopardy.json: 308,079 µs">
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.69</text>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.58</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;2.36× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 489 µs&#10;citm_catalog.json: 902 µs&#10;canada.json: 5,659 µs&#10;jeopardy.json: 127,823 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;2.37× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 488 µs&#10;citm_catalog.json: 903 µs&#10;canada.json: 5,752 µs&#10;jeopardy.json: 132,633 µs">
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.36</text>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.37</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">simd-json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;2.22× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 592 µs&#10;citm_catalog.json: 1,426 µs&#10;canada.json: 4,303 µs&#10;jeopardy.json: 211,716 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;2.15× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 563 µs&#10;citm_catalog.json: 1,403 µs&#10;canada.json: 4,630 µs&#10;jeopardy.json: 212,467 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.22</text>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.15</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.83× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 722 µs&#10;citm_catalog.json: 1,686 µs&#10;canada.json: 5,191 µs&#10;jeopardy.json: 220,582 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.78× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 668 µs&#10;citm_catalog.json: 1,688 µs&#10;canada.json: 5,134 µs&#10;jeopardy.json: 224,411 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="317" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.83</text>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.78</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.54× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 730 µs&#10;citm_catalog.json: 1,658 µs&#10;canada.json: 4,915 µs&#10;jeopardy.json: 266,073 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.56× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 740 µs&#10;citm_catalog.json: 1,802 µs&#10;canada.json: 4,997 µs&#10;jeopardy.json: 258,566 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="409" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.54</text>
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.56</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;3.05× the time of the fastest library (fully validating)&#10;twitter.json: 2,071 µs · borrowed (copy)&#10;citm_catalog.json: 4,465 µs · borrowed (copy)&#10;canada.json: 16,360 µs · owned (copy)&#10;jeopardy.json: 416,658 µs · borrowed (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;3.13× the time of the fastest library (fully validating)&#10;twitter.json: 1,924 µs · borrowed (copy)&#10;citm_catalog.json: 4,575 µs · borrowed (copy)&#10;canada.json: 15,746 µs · owned (copy)&#10;jeopardy.json: 435,817 µs · borrowed (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.05</text>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.13</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.42× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 1,924 µs&#10;citm_catalog.json: 4,375 µs&#10;canada.json: 15,278 µs&#10;jeopardy.json: 419,474 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.50× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 1,878 µs&#10;citm_catalog.json: 4,655 µs&#10;canada.json: 15,955 µs&#10;jeopardy.json: 419,412 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="593" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.42</text>
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.50</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;2.24× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 604 µs&#10;citm_catalog.json: 809 µs&#10;canada.json: 4,825 µs&#10;jeopardy.json: 110,710 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;2.23× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 597 µs&#10;citm_catalog.json: 809 µs&#10;canada.json: 4,817 µs&#10;jeopardy.json: 114,245 µs">
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.24</text>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.23</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">serde_json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;1.47× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 634 µs&#10;citm_catalog.json: 1,448 µs&#10;canada.json: 2,402 µs&#10;jeopardy.json: 66,822 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;1.43× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 622 µs&#10;citm_catalog.json: 1,440 µs&#10;canada.json: 2,621 µs&#10;jeopardy.json: 65,602 µs">
<rect class="nj-heat-1" x="225" y="297" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.47</text>
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.43</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;1.31× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 487 µs&#10;citm_catalog.json: 1,370 µs&#10;canada.json: 2,318 µs&#10;jeopardy.json: 59,801 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;1.29× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 480 µs&#10;citm_catalog.json: 1,371 µs&#10;canada.json: 2,538 µs&#10;jeopardy.json: 60,154 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<rect class="nj-heat-1" x="271" y="297" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.31</text>
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.29</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="325" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.18× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 1,318 µs&#10;citm_catalog.json: 2,299 µs&#10;canada.json: 7,610 µs&#10;jeopardy.json: 123,810 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.17× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 1,311 µs&#10;citm_catalog.json: 2,316 µs&#10;canada.json: 7,241 µs&#10;jeopardy.json: 130,249 µs">
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.18</text>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.17</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;1.69× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 769 µs&#10;citm_catalog.json: 1,504 µs&#10;canada.json: 2,442 µs&#10;jeopardy.json: 108,386 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;1.70× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 722 µs&#10;citm_catalog.json: 1,559 µs&#10;canada.json: 2,585 µs&#10;jeopardy.json: 114,701 µs">
<rect class="nj-heat-2" x="409" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.69</text>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.70</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;5.01× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,474 µs&#10;citm_catalog.json: 6,922 µs&#10;canada.json: 18,301 µs&#10;jeopardy.json: 805,290 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;5.10× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,036 µs&#10;citm_catalog.json: 7,181 µs&#10;canada.json: 17,371 µs&#10;jeopardy.json: 843,034 µs">
<rect class="nj-heat-4" x="501" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">5.01</text>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">5.10</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.25× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,081 µs&#10;citm_catalog.json: 6,880 µs&#10;canada.json: 17,249 µs&#10;jeopardy.json: 615,033 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.33× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,220 µs&#10;citm_catalog.json: 6,876 µs&#10;canada.json: 17,276 µs&#10;jeopardy.json: 628,192 µs">
<rect class="nj-heat-4" x="593" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.25</text>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.33</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.19× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 563 µs&#10;citm_catalog.json: 882 µs&#10;canada.json: 3,979 µs&#10;jeopardy.json: 120,716 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.19× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 560 µs&#10;citm_catalog.json: 848 µs&#10;canada.json: 3,964 µs&#10;jeopardy.json: 129,473 µs">
<rect class="nj-heat-2" x="685" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.19</text>
</g>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="354" text-anchor="end">nlohmann/json json</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;1.94× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 746 µs&#10;citm_catalog.json: 1,424 µs&#10;canada.json: 4,201 µs&#10;jeopardy.json: 100,878 µs">
<rect class="nj-heat-2" x="225" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="354" text-anchor="middle">1.94</text>
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">Glaze</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.39× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 617 µs&#10;citm_catalog.json: 1,370 µs&#10;canada.json: 1,990 µs&#10;jeopardy.json: 81,604 µs">
<rect class="nj-heat-1" x="225" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="354" text-anchor="middle">1.39</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.49× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 784 µs&#10;citm_catalog.json: 1,466 µs&#10;canada.json: 5,345 µs&#10;jeopardy.json: 101,437 µs">
<rect class="nj-heat-1" x="317" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="354" text-anchor="middle">1.49</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;4.30× the time of the fastest library (fully validating)&#10;way: generic (double, strict)&#10;twitter.json: 2,516 µs&#10;citm_catalog.json: 4,350 µs&#10;canada.json: 13,015 µs&#10;jeopardy.json: 311,560 µs">
<rect class="nj-heat-3" x="317" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">4.30</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;7.92× the time of the fastest library (fully validating)&#10;twitter.json: 3,654 µs · parse&#10;citm_catalog.json: 5,494 µs · parse&#10;canada.json: 11,583 µs · structs (from_json)&#10;jeopardy.json: 641,176 µs · structs (from_json)">
<rect class="nj-heat-4" x="409" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="354" text-anchor="middle">7.92</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less&#10;3.92× the time of the fastest fully validating library&#10;twitter.json: 2,516 µs · generic (double, strict) (validates fully)&#10;citm_catalog.json: 4,321 µs · generic (double)&#10;canada.json: 13,015 µs · generic (double, strict) (validates fully)&#10;jeopardy.json: 215,314 µs · lazy_json&#10;accepts trailing garbage after the value: Glaze&#x27;s default (validate_trailing_whitespace checks it)&#10;reads lazily: lazy_json reads only what you ask for and steps over the rest">
<rect class="nj-heat-3" x="363" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">3.92</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;4.24× the time of the fastest library (fully validating)&#10;twitter.json: 3,058 µs · ordered_json&#10;citm_catalog.json: 5,099 µs · ordered_json&#10;canada.json: 16,378 µs · parse&#10;jeopardy.json: 920,570 µs · ordered_json">
<rect class="nj-heat-3" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">4.24</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.31× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 563 µs&#10;citm_catalog.json: 1,270 µs&#10;canada.json: 1,790 µs&#10;jeopardy.json: 91,224 µs">
<rect class="nj-heat-1" x="409" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">1.31</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;5.30× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 4,037 µs&#10;citm_catalog.json: 6,081 µs&#10;canada.json: 16,349 µs&#10;jeopardy.json: 771,912 µs">
<rect class="nj-heat-4" x="593" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="354" text-anchor="middle">5.30</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.58× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 340 µs&#10;citm_catalog.json: 412 µs&#10;canada.json: 460 µs&#10;jeopardy.json: 70,238 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<rect class="nj-heat-0" x="455" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">0.58</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;1.92× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 445 µs&#10;citm_catalog.json: 590 µs&#10;canada.json: 4,523 µs&#10;jeopardy.json: 118,446 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;6.15× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 4,192 µs&#10;citm_catalog.json: 8,087 µs&#10;canada.json: 30,621 µs&#10;jeopardy.json: 868,944 µs">
<rect class="nj-heat-4" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">6.15</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;6.27× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 4,058 µs&#10;citm_catalog.json: 8,169 µs&#10;canada.json: 29,542 µs&#10;jeopardy.json: 615,992 µs">
<rect class="nj-heat-4" x="593" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">6.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;0.68× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 413 µs&#10;citm_catalog.json: 1,055 µs&#10;canada.json: 2,139 µs&#10;jeopardy.json: 88,989 µs&#10;minify_json only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="348" text-anchor="middle">0.68</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;1.97× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 388 µs&#10;citm_catalog.json: 717 µs&#10;canada.json: 4,140 µs&#10;jeopardy.json: 138,931 µs">
<rect class="nj-heat-2" x="685" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.92</text>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.97</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="390" text-anchor="end">Glaze</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.40× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 621 µs&#10;citm_catalog.json: 1,402 µs&#10;canada.json: 1,806 µs&#10;jeopardy.json: 76,164 µs">
<rect class="nj-heat-1" x="225" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">1.40</text>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="390" text-anchor="end">nlohmann/json json</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;1.88× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 736 µs&#10;citm_catalog.json: 1,417 µs&#10;canada.json: 4,605 µs&#10;jeopardy.json: 95,644 µs">
<rect class="nj-heat-2" x="225" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">1.88</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;7.35× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 3,890 µs&#10;citm_catalog.json: 7,282 µs&#10;canada.json: 25,798 µs&#10;jeopardy.json: 501,805 µs">
<rect class="nj-heat-4" x="317" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="390" text-anchor="middle">7.35</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.47× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 750 µs&#10;citm_catalog.json: 1,488 µs&#10;canada.json: 5,684 µs&#10;jeopardy.json: 95,696 µs">
<rect class="nj-heat-1" x="317" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="390" text-anchor="middle">1.47</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less&#10;5.04× the time of the fastest fully validating library&#10;twitter.json: 2,829 µs · lazy_json&#10;citm_catalog.json: 7,282 µs · generic (validates fully)&#10;canada.json: 17,578 µs · lazy_json&#10;jeopardy.json: 223,672 µs · lazy_json&#10;reads lazily: lazy_json reads only what you ask for and steps over the rest">
<rect class="nj-heat-4" x="363" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="384" text-anchor="middle">5.04</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="397" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;7.96× the time of the fastest library (fully validating)&#10;way: structs (from_json)&#10;twitter.json: 3,825 µs&#10;citm_catalog.json: 5,475 µs&#10;canada.json: 12,002 µs&#10;jeopardy.json: 639,061 µs">
<rect class="nj-heat-4" x="409" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">7.96</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.35× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 560 µs&#10;citm_catalog.json: 1,329 µs&#10;canada.json: 1,780 µs&#10;jeopardy.json: 93,674 µs">
<rect class="nj-heat-1" x="409" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="390" text-anchor="middle">1.35</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;4.27× the time of the fastest library (fully validating)&#10;twitter.json: 2,810 µs · ordered_json&#10;citm_catalog.json: 5,096 µs · ordered_json&#10;canada.json: 16,935 µs · parse&#10;jeopardy.json: 864,150 µs · ordered_json">
<rect class="nj-heat-3" x="501" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">4.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.61× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 345 µs&#10;citm_catalog.json: 424 µs&#10;canada.json: 463 µs&#10;jeopardy.json: 76,186 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<rect class="nj-heat-0" x="455" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="384" text-anchor="middle">0.61</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="397" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;5.24× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 3,903 µs&#10;citm_catalog.json: 6,251 µs&#10;canada.json: 16,164 µs&#10;jeopardy.json: 744,934 µs">
<rect class="nj-heat-4" x="593" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">5.24</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;6.32× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 4,278 µs&#10;citm_catalog.json: 7,989 µs&#10;canada.json: 30,869 µs&#10;jeopardy.json: 1,095,800 µs">
<rect class="nj-heat-4" x="501" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">6.32</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;6.39× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 4,215 µs&#10;citm_catalog.json: 7,644 µs&#10;canada.json: 29,762 µs&#10;jeopardy.json: 683,744 µs">
<rect class="nj-heat-4" x="593" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="390" text-anchor="middle">6.39</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;0.69× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 418 µs&#10;citm_catalog.json: 1,062 µs&#10;canada.json: 2,150 µs&#10;jeopardy.json: 93,265 µs&#10;minify_json only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="384" text-anchor="middle">0.69</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="397" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;2.03× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 413 µs&#10;citm_catalog.json: 725 µs&#10;canada.json: 4,239 µs&#10;jeopardy.json: 137,011 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;1.91× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 438 µs&#10;citm_catalog.json: 597 µs&#10;canada.json: 4,571 µs&#10;jeopardy.json: 119,233 µs">
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">2.03</text>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">1.91</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="426" text-anchor="end">RapidJSON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;4.31× the time of the fastest library (fully validating)&#10;twitter.json: 1,845 µs · insitu (copy)&#10;citm_catalog.json: 2,150 µs · S&#8203;AX&#10;canada.json: 11,719 µs · S&#8203;AX&#10;jeopardy.json: 233,417 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;4.14× the time of the fastest library (fully validating)&#10;twitter.json: 1,815 µs · insitu (copy)&#10;citm_catalog.json: 2,123 µs · S&#8203;AX&#10;canada.json: 11,775 µs · S&#8203;AX (raw numbers)&#10;jeopardy.json: 237,714 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="225" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">4.31</text>
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">4.14</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.29× the time of the fastest fully validating library&#10;twitter.json: 1,227 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,665 µs · S&#8203;AX (no encoding check)&#10;canada.json: 11,601 µs · S&#8203;AX (no encoding check)&#10;jeopardy.json: 156,744 µs · S&#8203;AX (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.17× the time of the fastest fully validating library&#10;twitter.json: 1,174 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,663 µs · S&#8203;AX (no encoding check)&#10;canada.json: 11,740 µs · S&#8203;AX (raw numbers) (no encoding check)&#10;jeopardy.json: 161,724 µs · S&#8203;AX (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="271" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.29</text>
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.17</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;3.16× the time of the fastest library (fully validating)&#10;twitter.json: 1,869 µs · insitu (copy)&#10;citm_catalog.json: 2,172 µs · S&#8203;AX&#10;canada.json: 12,183 µs · S&#8203;AX&#10;jeopardy.json: 253,075 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;3.24× the time of the fastest library (fully validating)&#10;twitter.json: 1,866 µs · insitu (copy)&#10;citm_catalog.json: 2,308 µs · S&#8203;AX&#10;canada.json: 13,209 µs · S&#8203;AX&#10;jeopardy.json: 251,431 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="317" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">3.16</text>
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">3.24</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.42× the time of the fastest fully validating library&#10;twitter.json: 1,237 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,770 µs · S&#8203;AX (no encoding check)&#10;canada.json: 12,082 µs · insitu (copy) (no encoding check)&#10;jeopardy.json: 163,826 µs · S&#8203;AX (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.50× the time of the fastest fully validating library&#10;twitter.json: 1,233 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,863 µs · S&#8203;AX (no encoding check)&#10;canada.json: 12,976 µs · S&#8203;AX (no encoding check)&#10;jeopardy.json: 169,921 µs · S&#8203;AX (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="363" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.42</text>
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.50</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;4.32× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,901 µs&#10;citm_catalog.json: 2,329 µs&#10;canada.json: 11,814 µs&#10;jeopardy.json: 251,223 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;4.27× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,893 µs&#10;citm_catalog.json: 2,322 µs&#10;canada.json: 11,855 µs&#10;jeopardy.json: 255,774 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="409" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">4.32</text>
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">4.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.40× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 1,251 µs&#10;citm_catalog.json: 1,936 µs&#10;canada.json: 11,565 µs&#10;jeopardy.json: 181,144 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.38× the time of the fastest fully validating library&#10;twitter.json: 1,189 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,944 µs · insitu (copy) (no encoding check)&#10;canada.json: 11,855 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 189,496 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="455" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.40</text>
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.38</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;3.16× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 2,565 µs&#10;citm_catalog.json: 3,328 µs&#10;canada.json: 22,449 µs&#10;jeopardy.json: 378,036 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;3.24× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 2,486 µs&#10;citm_catalog.json: 3,253 µs&#10;canada.json: 21,592 µs&#10;jeopardy.json: 397,189 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">3.16</text>
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">3.24</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;2.69× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 1,902 µs&#10;citm_catalog.json: 2,859 µs&#10;canada.json: 21,667 µs&#10;jeopardy.json: 321,177 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;2.73× the time of the fastest fully validating library&#10;twitter.json: 1,852 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 2,889 µs · insitu (copy) (no encoding check)&#10;canada.json: 21,592 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 301,007 µs · Document (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="547" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">2.69</text>
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">2.73</text>
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;3.48× the time of the fastest library (fully validating)&#10;twitter.json: 2,465 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 2,829 µs · S&#8203;AX to Writer&#10;canada.json: 22,132 µs · Document + Writer&#10;jeopardy.json: 374,258 µs · S&#8203;AX to Writer">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;3.45× the time of the fastest library (fully validating)&#10;twitter.json: 2,403 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 2,933 µs · S&#8203;AX to Writer&#10;canada.json: 21,919 µs · Document + Writer&#10;jeopardy.json: 359,464 µs · S&#8203;AX to Writer">
<rect class="nj-heat-3" x="593" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">3.48</text>
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">3.45</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;2.90× the time of the fastest fully validating library&#10;twitter.json: 1,928 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 2,416 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 22,132 µs · Document + Writer (validates fully)&#10;jeopardy.json: 269,637 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;2.85× the time of the fastest fully validating library&#10;twitter.json: 1,776 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 2,429 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 21,919 µs · Document + Writer (validates fully)&#10;jeopardy.json: 273,075 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<rect class="nj-heat-3" x="639" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">2.90</text>
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">2.85</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;2.93× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 644 µs&#10;citm_catalog.json: 966 µs&#10;canada.json: 9,614 µs&#10;jeopardy.json: 127,167 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;2.94× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 639 µs&#10;citm_catalog.json: 961 µs&#10;canada.json: 9,785 µs&#10;jeopardy.json: 132,023 µs">
<rect class="nj-heat-3" x="685" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">2.93</text>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">2.94</text>
</g>
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

@@ -1,6 +1,6 @@
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-x86-gcc nj-blog-uc-x86-gcc-d" xmlns="http://www.w3.org/2000/svg">
<title id="nj-blog-uc-x86-gcc">Use cases: time of each library relative to the fastest, x86-64 with G&#8203;CC 16.2</title>
<desc id="nj-blog-uc-x86-gcc-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.10; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.53; yyjson sum: 1.32; yyjson select: 1.47; yyjson edit: 1.45; yyjson minify: 1.28; yyjson write: 1.07; sonic-rs (Rust) validate: 1.17; sonic-rs (Rust) sum: 1.15; sonic-rs (Rust) select: 1.31; sonic-rs (Rust) edit: 1.92; sonic-rs (Rust) minify: 1.67; sonic-rs (Rust) write: 1.98; simdjson validate: 1.27; simdjson sum: 1.00; simdjson select: 1.26 (0.62 checking less, partial); simdjson edit: n/a; simdjson minify: 1.87 (0.18 checking less, partial); simdjson write: 2.84; sonic-cpp validate: no fully validating way (1.41 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.25 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (1.36 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.21 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (1.34 checking less, no U&#8203;TF-8); sonic-cpp write: 1.50; Boost.J&#8203;SON validate: 1.67; Boost.J&#8203;SON sum: 1.26; Boost.J&#8203;SON select: 3.04; Boost.J&#8203;SON edit: 2.24; Boost.J&#8203;SON minify: 2.57; Boost.J&#8203;SON write: 2.25; simd-json (Rust) validate: 2.26; simd-json (Rust) sum: 1.99; simd-json (Rust) select: 2.52; simd-json (Rust) edit: 3.09; simd-json (Rust) minify: 3.31; simd-json (Rust) write: 2.22; serde_json (Rust) validate: 1.49 (1.33 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.38; serde_json (Rust) select: 1.67; serde_json (Rust) edit: 5.07; serde_json (Rust) minify: 5.07; serde_json (Rust) write: 2.17; RapidJSON validate: 3.34 (3.06 checking less, no U&#8203;TF-8); RapidJSON sum: 2.70 (2.46 checking less, no U&#8203;TF-8); RapidJSON select: 3.27 (3.10 checking less, no U&#8203;TF-8); RapidJSON edit: 2.64 (2.54 checking less, no U&#8203;TF-8); RapidJSON minify: 3.37 (2.78 checking less, no U&#8203;TF-8); RapidJSON write: 2.95; Glaze validate: 1.76; Glaze sum: 5.98 (5.38 checking less, partial); Glaze select: 1.71 (0.59 checking less, partial); Glaze edit: 5.05; Glaze minify: 4.82 (0.75 checking less, partial); Glaze write: 1.90; nlohmann/json json validate: 2.06; nlohmann/json json sum: 1.67; nlohmann/json json select: 7.98; nlohmann/json json edit: 4.16; nlohmann/json json minify: 5.23; nlohmann/json json write: 1.87.</desc>
<desc id="nj-blog-uc-x86-gcc-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.09; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.37; yyjson sum: 1.34; yyjson select: 1.36; yyjson edit: 1.49; yyjson minify: 1.27; yyjson write: 1.09; sonic-cpp validate: no fully validating way (1.40 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.29 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (1.38 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.24 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (1.36 checking less, no U&#8203;TF-8); sonic-cpp write: 1.50; simdjson validate: 1.27; simdjson sum: 1.00; simdjson select: 1.26 (0.53 checking less, partial); simdjson edit: n/a; simdjson minify: 1.61 (0.18 checking less, partial); simdjson write: 2.23; sonic-rs (Rust) validate: 1.20; sonic-rs (Rust) sum: 1.15; sonic-rs (Rust) select: 1.32; sonic-rs (Rust) edit: 2.01; sonic-rs (Rust) minify: 1.74; sonic-rs (Rust) write: 2.04; Boost.J&#8203;SON validate: 1.19; Boost.J&#8203;SON sum: 1.30; Boost.J&#8203;SON select: 2.14; Boost.J&#8203;SON edit: 2.34; Boost.J&#8203;SON minify: 2.56; Boost.J&#8203;SON write: 2.25; simd-json (Rust) validate: 2.24; simd-json (Rust) sum: 1.97; simd-json (Rust) select: 2.60; simd-json (Rust) edit: 3.18; simd-json (Rust) minify: 3.48; simd-json (Rust) write: 2.26; serde_json (Rust) validate: 1.50 (1.35 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.40; serde_json (Rust) select: 1.72; serde_json (Rust) edit: 5.17; serde_json (Rust) minify: 5.30; serde_json (Rust) write: 2.22; Glaze validate: 1.75; Glaze sum: 4.38 (4.19 checking less, partial); Glaze select: 1.68 (0.58 checking less, partial); Glaze edit: 4.91; Glaze minify: 4.87 (0.76 checking less, partial); Glaze write: 1.97; RapidJSON validate: 3.37 (3.08 checking less, no U&#8203;TF-8); RapidJSON sum: 2.74 (2.52 checking less, no U&#8203;TF-8); RapidJSON select: 3.31 (3.09 checking less, no U&#8203;TF-8); RapidJSON edit: 2.78 (2.66 checking less, no U&#8203;TF-8); RapidJSON minify: 3.39 (2.81 checking less, no U&#8203;TF-8); RapidJSON write: 2.93; nlohmann/json json validate: 2.08; nlohmann/json json sum: 1.70; nlohmann/json json select: 7.88; nlohmann/json json edit: 4.26; nlohmann/json json minify: 5.18; nlohmann/json json write: 1.85.</desc>
<text class="nj-charts-tick" x="270" y="34">validate</text>
<text class="nj-charts-tick" x="362" y="34">sum</text>
<text class="nj-charts-tick" x="454" y="34">select</text>
@@ -8,339 +8,339 @@
<text class="nj-charts-tick" x="638" y="34">minify</text>
<text class="nj-charts-tick" x="730" y="34">write</text>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 304 µs · parse&#10;citm_catalog.json: 733 µs · parse&#10;canada.json: 1,682 µs · accept&#10;jeopardy.json: 78,594 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 310 µs · accept&#10;citm_catalog.json: 732 µs · accept&#10;canada.json: 1,685 µs · parse&#10;jeopardy.json: 80,224 µs · accept">
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.10× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 383 µs&#10;citm_catalog.json: 932 µs&#10;canada.json: 3,874 µs&#10;jeopardy.json: 93,197 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.09× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 384 µs&#10;citm_catalog.json: 929 µs&#10;canada.json: 3,867 µs&#10;jeopardy.json: 89,000 µs">
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.10</text>
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.09</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 325 µs · structs (from_json)&#10;citm_catalog.json: 784 µs · structs (from_json)&#10;canada.json: 1,686 µs · parse&#10;jeopardy.json: 91,622 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 327 µs&#10;citm_catalog.json: 752 µs&#10;canada.json: 1,684 µs&#10;jeopardy.json: 91,119 µs">
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 552 µs&#10;citm_catalog.json: 1,082 µs&#10;canada.json: 5,801 µs&#10;jeopardy.json: 198,867 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 531 µs&#10;citm_catalog.json: 1,081 µs&#10;canada.json: 5,914 µs&#10;jeopardy.json: 174,422 µs">
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 482 µs&#10;citm_catalog.json: 1,001 µs&#10;canada.json: 5,856 µs&#10;jeopardy.json: 159,533 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 480 µs&#10;citm_catalog.json: 995 µs&#10;canada.json: 5,655 µs&#10;jeopardy.json: 147,812 µs">
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 155 µs&#10;citm_catalog.json: 253 µs&#10;canada.json: 3,899 µs&#10;jeopardy.json: 69,593 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 154 µs&#10;citm_catalog.json: 252 µs&#10;canada.json: 3,864 µs&#10;jeopardy.json: 67,299 µs">
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.53× the time of the fastest library (fully validating)&#10;twitter.json: 394 µs · insitu (copy)&#10;citm_catalog.json: 956 µs · read&#10;canada.json: 3,322 µs · insitu (copy)&#10;jeopardy.json: 130,978 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="225" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.53</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.37× the time of the fastest library (fully validating)&#10;twitter.json: 397 µs · insitu (copy)&#10;citm_catalog.json: 935 µs · read (raw numbers)&#10;canada.json: 2,151 µs · read (raw numbers)&#10;jeopardy.json: 135,866 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="225" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.37</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.32× the time of the fastest library (fully validating)&#10;twitter.json: 448 µs · insitu (copy)&#10;citm_catalog.json: 1,094 µs · insitu (copy)&#10;canada.json: 3,955 µs · insitu (copy)&#10;jeopardy.json: 136,684 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.34× the time of the fastest library (fully validating)&#10;twitter.json: 450 µs · read&#10;citm_catalog.json: 1,101 µs · insitu (copy)&#10;canada.json: 3,944 µs · insitu (copy)&#10;jeopardy.json: 140,178 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="317" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.32</text>
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.47× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 403 µs&#10;citm_catalog.json: 1,011 µs&#10;canada.json: 3,268 µs&#10;jeopardy.json: 139,623 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.36× the time of the fastest library (fully validating)&#10;twitter.json: 445 µs · read&#10;citm_catalog.json: 956 µs · read&#10;canada.json: 2,139 µs · read (raw numbers)&#10;jeopardy.json: 143,238 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.47</text>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.36</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.45× the time of the fastest library (fully validating)&#10;twitter.json: 801 µs · insitu (copy) + mut copy&#10;citm_catalog.json: 1,641 µs · mut copy&#10;canada.json: 7,402 µs · mut copy&#10;jeopardy.json: 313,182 µs · insitu (copy) + mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.49× the time of the fastest library (fully validating)&#10;twitter.json: 798 µs · insitu (copy) + mut copy&#10;citm_catalog.json: 1,645 µs · insitu (copy) + mut copy&#10;canada.json: 7,430 µs · insitu (copy) + mut copy&#10;jeopardy.json: 297,562 µs · mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="501" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.45</text>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.49</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.28× the time of the fastest library (fully validating)&#10;twitter.json: 658 µs · read + write&#10;citm_catalog.json: 1,268 µs · insitu (copy) + write&#10;canada.json: 6,934 µs · insitu (copy) + write&#10;jeopardy.json: 210,677 µs · insitu (copy) + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.27× the time of the fastest library (fully validating)&#10;twitter.json: 622 µs · insitu (copy) + write&#10;citm_catalog.json: 1,264 µs · insitu (copy) + write&#10;canada.json: 6,624 µs · insitu (copy) + write&#10;jeopardy.json: 198,884 µs · read + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.28</text>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.07× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 190 µs&#10;citm_catalog.json: 320 µs&#10;canada.json: 3,349 µs&#10;jeopardy.json: 69,582 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.09× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 193 µs&#10;citm_catalog.json: 320 µs&#10;canada.json: 3,391 µs&#10;jeopardy.json: 68,367 µs">
<rect class="nj-heat-0" x="685" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.07</text>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.09</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.17× the time of the fastest library (fully validating)&#10;way: IgnoredAny&#10;twitter.json: 470 µs&#10;citm_catalog.json: 966 µs&#10;canada.json: 2,249 µs&#10;jeopardy.json: 54,246 µs">
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;1.40× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 404 µs&#10;citm_catalog.json: 921 µs&#10;canada.json: 3,186 µs&#10;jeopardy.json: 100,732 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="225" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.17</text>
<text class="nj-charts-cell" x="270" y="132" text-anchor="middle">1.40</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.15× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 494 µs&#10;citm_catalog.json: 1,135 µs&#10;canada.json: 4,580 µs&#10;jeopardy.json: 59,149 µs">
<rect class="nj-heat-0" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.15</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.29× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 462 µs&#10;citm_catalog.json: 1,197 µs&#10;canada.json: 3,854 µs&#10;jeopardy.json: 109,985 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="132" text-anchor="middle">1.29</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.31× the time of the fastest library (fully validating)&#10;way: structs&#10;twitter.json: 557 µs&#10;citm_catalog.json: 1,023 µs&#10;canada.json: 2,247 µs&#10;jeopardy.json: 91,996 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;1.38× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 409 µs&#10;citm_catalog.json: 944 µs&#10;canada.json: 3,172 µs&#10;jeopardy.json: 112,498 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="409" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.31</text>
<text class="nj-charts-cell" x="454" y="132" text-anchor="middle">1.38</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;1.92× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,189 µs&#10;citm_catalog.json: 2,384 µs&#10;canada.json: 8,007 µs&#10;jeopardy.json: 413,714 µs">
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">1.92</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.24× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 624 µs&#10;citm_catalog.json: 1,445 µs&#10;canada.json: 8,363 µs&#10;jeopardy.json: 188,709 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="132" text-anchor="middle">1.24</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.67× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 988 µs&#10;citm_catalog.json: 2,093 µs&#10;canada.json: 7,775 µs&#10;jeopardy.json: 217,697 µs">
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.67</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;1.36× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 633 µs&#10;citm_catalog.json: 1,435 µs&#10;canada.json: 8,404 µs&#10;jeopardy.json: 179,298 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="132" text-anchor="middle">1.36</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;1.98× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 442 µs&#10;citm_catalog.json: 935 µs&#10;canada.json: 3,954 µs&#10;jeopardy.json: 100,889 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.50× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 260 µs&#10;citm_catalog.json: 508 µs&#10;canada.json: 5,333 µs&#10;jeopardy.json: 73,212 µs">
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.98</text>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.50</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.27× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 302 µs&#10;citm_catalog.json: 705 µs&#10;canada.json: 3,176 µs&#10;jeopardy.json: 114,180 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.27× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 302 µs&#10;citm_catalog.json: 676 µs&#10;canada.json: 3,234 µs&#10;jeopardy.json: 121,861 µs">
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: On-Demand&#10;twitter.json: 347 µs&#10;citm_catalog.json: 796 µs&#10;canada.json: 3,476 µs&#10;jeopardy.json: 92,000 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: On-Demand&#10;twitter.json: 348 µs&#10;citm_catalog.json: 804 µs&#10;canada.json: 3,368 µs&#10;jeopardy.json: 90,882 µs">
<rect class="nj-heat-0" x="317" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.26× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 315 µs&#10;citm_catalog.json: 754 µs&#10;canada.json: 3,190 µs&#10;jeopardy.json: 129,838 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.26× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 337 µs&#10;citm_catalog.json: 686 µs&#10;canada.json: 3,191 µs&#10;jeopardy.json: 128,921 µs">
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.26</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.62× the time of the fastest fully validating library&#10;way: On-Demand&#10;twitter.json: 202 µs&#10;citm_catalog.json: 642 µs&#10;canada.json: 907 µs&#10;jeopardy.json: 50,352 µs&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.53× the time of the fastest fully validating library&#10;twitter.json: 183 µs · On-Demand structs&#10;citm_catalog.json: 483 µs · On-Demand (key selectors)&#10;canada.json: 700 µs · On-Demand (key selectors)&#10;jeopardy.json: 49,265 µs · On-Demand (key selectors)&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.62</text>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.53</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit&#10;simdjson&#x27;s documents are read-only: it has no A&#8203;PI to change a value and write the result">
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-tick" x="546" y="174">n/a</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;1.87× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 799 µs&#10;citm_catalog.json: 1,461 µs&#10;canada.json: 15,173 µs&#10;jeopardy.json: 310,524 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;1.61× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 787 µs&#10;citm_catalog.json: 1,300 µs&#10;canada.json: 8,944 µs&#10;jeopardy.json: 295,041 µs">
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.87</text>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.61</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.18× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 104 µs&#10;citm_catalog.json: 246 µs&#10;canada.json: 365 µs&#10;jeopardy.json: 47,397 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.18× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 104 µs&#10;citm_catalog.json: 247 µs&#10;canada.json: 367 µs&#10;jeopardy.json: 46,756 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.18</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;2.84× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 471 µs&#10;citm_catalog.json: 712 µs&#10;canada.json: 11,156 µs&#10;jeopardy.json: 186,861 µs">
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.84</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;2.23× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 457 µs&#10;citm_catalog.json: 597 µs&#10;canada.json: 5,272 µs&#10;jeopardy.json: 173,760 µs">
<rect class="nj-heat-2" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.23</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;1.41× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 405 µs&#10;citm_catalog.json: 935 µs&#10;canada.json: 3,218 µs&#10;jeopardy.json: 95,565 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.20× the time of the fastest library (fully validating)&#10;way: IgnoredAny&#10;twitter.json: 482 µs&#10;citm_catalog.json: 969 µs&#10;canada.json: 2,489 µs&#10;jeopardy.json: 55,486 µs">
<rect class="nj-heat-1" x="225" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">1.41</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="270" y="210" text-anchor="middle">1.20</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.25× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 462 µs&#10;citm_catalog.json: 1,125 µs&#10;canada.json: 3,867 µs&#10;jeopardy.json: 106,727 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.15× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 503 µs&#10;citm_catalog.json: 1,123 µs&#10;canada.json: 4,418 µs&#10;jeopardy.json: 59,993 µs">
<rect class="nj-heat-1" x="317" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.25</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="362" y="210" text-anchor="middle">1.15</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;1.36× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 410 µs&#10;citm_catalog.json: 952 µs&#10;canada.json: 3,249 µs&#10;jeopardy.json: 106,866 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.32× the time of the fastest library (fully validating)&#10;way: structs&#10;twitter.json: 538 µs&#10;citm_catalog.json: 1,028 µs&#10;canada.json: 2,283 µs&#10;jeopardy.json: 91,950 µs">
<rect class="nj-heat-1" x="409" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">1.36</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="454" y="210" text-anchor="middle">1.32</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.21× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 629 µs&#10;citm_catalog.json: 1,455 µs&#10;canada.json: 8,594 µs&#10;jeopardy.json: 185,870 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.21</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;2.01× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,201 µs&#10;citm_catalog.json: 2,416 µs&#10;canada.json: 7,958 µs&#10;jeopardy.json: 421,718 µs">
<rect class="nj-heat-2" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="210" text-anchor="middle">2.01</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;1.34× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 633 µs&#10;citm_catalog.json: 1,436 µs&#10;canada.json: 8,992 µs&#10;jeopardy.json: 178,113 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">1.34</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.74× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,003 µs&#10;citm_catalog.json: 2,174 µs&#10;canada.json: 7,753 µs&#10;jeopardy.json: 217,354 µs">
<rect class="nj-heat-2" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="210" text-anchor="middle">1.74</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.50× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 259 µs&#10;citm_catalog.json: 510 µs&#10;canada.json: 5,269 µs&#10;jeopardy.json: 76,584 µs">
<rect class="nj-heat-1" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.50</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;2.04× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 445 µs&#10;citm_catalog.json: 931 µs&#10;canada.json: 4,048 µs&#10;jeopardy.json: 104,487 µs">
<rect class="nj-heat-2" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">2.04</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">Boost.J&#8203;SON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;1.67× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 680 µs&#10;citm_catalog.json: 922 µs&#10;canada.json: 5,993 µs&#10;jeopardy.json: 60,687 µs">
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.67</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;1.19× the time of the fastest library (fully validating)&#10;twitter.json: 680 µs · S&#8203;AX (numbers: none)&#10;citm_catalog.json: 909 µs · S&#8203;AX (numbers: none)&#10;canada.json: 1,642 µs · S&#8203;AX (numbers: none)&#10;jeopardy.json: 60,757 µs · S&#8203;AX">
<rect class="nj-heat-1" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.19</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.26× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 668 µs&#10;citm_catalog.json: 934 µs&#10;canada.json: 5,692 µs&#10;jeopardy.json: 62,486 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.30× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 688 µs&#10;citm_catalog.json: 1,020 µs&#10;canada.json: 5,676 µs&#10;jeopardy.json: 61,670 µs">
<rect class="nj-heat-1" x="317" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.26</text>
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.30</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;3.04× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,326 µs&#10;citm_catalog.json: 1,871 µs&#10;canada.json: 6,892 µs&#10;jeopardy.json: 196,136 µs">
<rect class="nj-heat-3" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">3.04</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;2.14× the time of the fastest library (fully validating)&#10;twitter.json: 954 µs · parse_into structs&#10;citm_catalog.json: 1,223 µs · parse_into structs&#10;canada.json: 6,775 µs · parse&#10;jeopardy.json: 99,560 µs · parse_into structs">
<rect class="nj-heat-2" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">2.14</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;2.24× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,771 µs&#10;citm_catalog.json: 2,496 µs&#10;canada.json: 12,504 µs&#10;jeopardy.json: 311,015 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;2.34× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,755 µs&#10;citm_catalog.json: 2,482 µs&#10;canada.json: 12,291 µs&#10;jeopardy.json: 331,024 µs">
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.24</text>
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;2.57× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,803 µs&#10;citm_catalog.json: 2,480 µs&#10;canada.json: 13,545 µs&#10;jeopardy.json: 324,721 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;2.56× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,772 µs&#10;citm_catalog.json: 2,495 µs&#10;canada.json: 12,783 µs&#10;jeopardy.json: 304,037 µs">
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.57</text>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.56</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;2.25× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 454 µs&#10;citm_catalog.json: 835 µs&#10;canada.json: 5,468 µs&#10;jeopardy.json: 132,656 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;2.25× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 452 µs&#10;citm_catalog.json: 827 µs&#10;canada.json: 5,615 µs&#10;jeopardy.json: 123,767 µs">
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.25</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">simd-json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;2.26× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 592 µs&#10;citm_catalog.json: 1,426 µs&#10;canada.json: 4,303 µs&#10;jeopardy.json: 211,716 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;2.24× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 563 µs&#10;citm_catalog.json: 1,403 µs&#10;canada.json: 4,630 µs&#10;jeopardy.json: 212,467 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.26</text>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.24</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.99× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 722 µs&#10;citm_catalog.json: 1,686 µs&#10;canada.json: 5,191 µs&#10;jeopardy.json: 220,582 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.97× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 668 µs&#10;citm_catalog.json: 1,688 µs&#10;canada.json: 5,134 µs&#10;jeopardy.json: 224,411 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="317" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.99</text>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.97</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.52× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 730 µs&#10;citm_catalog.json: 1,658 µs&#10;canada.json: 4,915 µs&#10;jeopardy.json: 266,073 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.60× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 740 µs&#10;citm_catalog.json: 1,802 µs&#10;canada.json: 4,997 µs&#10;jeopardy.json: 258,566 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="409" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.52</text>
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.60</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;3.09× the time of the fastest library (fully validating)&#10;twitter.json: 2,071 µs · borrowed (copy)&#10;citm_catalog.json: 4,465 µs · borrowed (copy)&#10;canada.json: 16,360 µs · owned (copy)&#10;jeopardy.json: 416,658 µs · borrowed (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;3.18× the time of the fastest library (fully validating)&#10;twitter.json: 1,924 µs · borrowed (copy)&#10;citm_catalog.json: 4,575 µs · borrowed (copy)&#10;canada.json: 15,746 µs · owned (copy)&#10;jeopardy.json: 435,817 µs · borrowed (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.09</text>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.18</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.31× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 1,924 µs&#10;citm_catalog.json: 4,375 µs&#10;canada.json: 15,278 µs&#10;jeopardy.json: 419,474 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.48× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 1,878 µs&#10;citm_catalog.json: 4,655 µs&#10;canada.json: 15,955 µs&#10;jeopardy.json: 419,412 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="593" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.31</text>
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.48</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;2.22× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 604 µs&#10;citm_catalog.json: 809 µs&#10;canada.json: 4,825 µs&#10;jeopardy.json: 110,710 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;2.26× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 597 µs&#10;citm_catalog.json: 809 µs&#10;canada.json: 4,817 µs&#10;jeopardy.json: 114,245 µs">
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.22</text>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.26</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">serde_json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;1.49× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 634 µs&#10;citm_catalog.json: 1,448 µs&#10;canada.json: 2,402 µs&#10;jeopardy.json: 66,822 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;1.50× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 622 µs&#10;citm_catalog.json: 1,440 µs&#10;canada.json: 2,621 µs&#10;jeopardy.json: 65,602 µs">
<rect class="nj-heat-1" x="225" y="297" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.49</text>
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.50</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;1.33× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 487 µs&#10;citm_catalog.json: 1,370 µs&#10;canada.json: 2,318 µs&#10;jeopardy.json: 59,801 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;1.35× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 480 µs&#10;citm_catalog.json: 1,371 µs&#10;canada.json: 2,538 µs&#10;jeopardy.json: 60,154 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<rect class="nj-heat-1" x="271" y="297" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.33</text>
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.35</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="325" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.38× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 1,318 µs&#10;citm_catalog.json: 2,299 µs&#10;canada.json: 7,610 µs&#10;jeopardy.json: 123,810 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.40× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 1,311 µs&#10;citm_catalog.json: 2,316 µs&#10;canada.json: 7,241 µs&#10;jeopardy.json: 130,249 µs">
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.38</text>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.40</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;1.67× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 769 µs&#10;citm_catalog.json: 1,504 µs&#10;canada.json: 2,442 µs&#10;jeopardy.json: 108,386 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;1.72× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 722 µs&#10;citm_catalog.json: 1,559 µs&#10;canada.json: 2,585 µs&#10;jeopardy.json: 114,701 µs">
<rect class="nj-heat-2" x="409" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.67</text>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.72</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;5.07× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,474 µs&#10;citm_catalog.json: 6,922 µs&#10;canada.json: 18,301 µs&#10;jeopardy.json: 805,290 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;5.17× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,036 µs&#10;citm_catalog.json: 7,181 µs&#10;canada.json: 17,371 µs&#10;jeopardy.json: 843,034 µs">
<rect class="nj-heat-4" x="501" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">5.07</text>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">5.17</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.07× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,081 µs&#10;citm_catalog.json: 6,880 µs&#10;canada.json: 17,249 µs&#10;jeopardy.json: 615,033 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.30× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,220 µs&#10;citm_catalog.json: 6,876 µs&#10;canada.json: 17,276 µs&#10;jeopardy.json: 628,192 µs">
<rect class="nj-heat-4" x="593" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.07</text>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.30</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.17× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 563 µs&#10;citm_catalog.json: 882 µs&#10;canada.json: 3,979 µs&#10;jeopardy.json: 120,716 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.22× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 560 µs&#10;citm_catalog.json: 848 µs&#10;canada.json: 3,964 µs&#10;jeopardy.json: 129,473 µs">
<rect class="nj-heat-2" x="685" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.17</text>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.22</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">RapidJSON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;3.34× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,250 µs&#10;citm_catalog.json: 1,910 µs&#10;canada.json: 10,181 µs&#10;jeopardy.json: 150,241 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="225" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="354" text-anchor="middle">3.34</text>
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">Glaze</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.75× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 714 µs&#10;citm_catalog.json: 1,975 µs&#10;canada.json: 2,544 µs&#10;jeopardy.json: 79,737 µs">
<rect class="nj-heat-2" x="225" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="354" text-anchor="middle">1.75</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.06× the time of the fastest fully validating library&#10;twitter.json: 1,098 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,607 µs · S&#8203;AX (no encoding check)&#10;canada.json: 10,181 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 143,546 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="271" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="348" text-anchor="middle">3.06</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="361" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;2.70× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,296 µs&#10;citm_catalog.json: 2,011 µs&#10;canada.json: 10,601 µs&#10;jeopardy.json: 170,083 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;4.38× the time of the fastest library (fully validating)&#10;way: generic (double, strict)&#10;twitter.json: 2,410 µs&#10;citm_catalog.json: 4,407 µs&#10;canada.json: 10,384 µs&#10;jeopardy.json: 285,204 µs">
<rect class="nj-heat-3" x="317" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">2.70</text>
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">4.38</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.46× the time of the fastest fully validating library&#10;twitter.json: 1,145 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,688 µs · S&#8203;AX (no encoding check)&#10;canada.json: 10,601 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 157,809 µs · S&#8203;AX (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="363" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">2.46</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="361" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less&#10;4.19× the time of the fastest fully validating library&#10;twitter.json: 2,410 µs · generic (double, strict) (validates fully)&#10;citm_catalog.json: 4,407 µs · generic (double, strict) (validates fully)&#10;canada.json: 10,384 µs · generic (double, strict) (validates fully)&#10;jeopardy.json: 239,395 µs · lazy_json&#10;reads lazily: lazy_json reads only what you ask for and steps over the rest">
<rect class="nj-heat-3" x="363" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">4.19</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;3.27× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,274 µs&#10;citm_catalog.json: 2,060 µs&#10;canada.json: 10,432 µs&#10;jeopardy.json: 165,343 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="409" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">3.27</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.68× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 679 µs&#10;citm_catalog.json: 1,971 µs&#10;canada.json: 2,518 µs&#10;jeopardy.json: 89,804 µs">
<rect class="nj-heat-2" x="409" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">1.68</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.10× the time of the fastest fully validating library&#10;twitter.json: 1,098 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 2,034 µs · Document (no encoding check)&#10;canada.json: 10,432 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 156,012 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="455" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">3.10</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.58× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 355 µs&#10;citm_catalog.json: 400 µs&#10;canada.json: 430 µs&#10;jeopardy.json: 68,491 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<rect class="nj-heat-0" x="455" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">0.58</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;2.64× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,983 µs&#10;citm_catalog.json: 2,859 µs&#10;canada.json: 19,769 µs&#10;jeopardy.json: 298,015 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="523.5" y="354" text-anchor="middle">2.64</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;4.91× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 3,451 µs&#10;citm_catalog.json: 6,457 µs&#10;canada.json: 21,021 µs&#10;jeopardy.json: 737,298 µs">
<rect class="nj-heat-3" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">4.91</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;2.54× the time of the fastest fully validating library&#10;twitter.json: 1,799 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 2,859 µs · insitu (copy) (validates fully)&#10;canada.json: 19,394 µs · insitu (copy) (no encoding check)&#10;jeopardy.json: 286,231 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="547" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="568.5" y="348" text-anchor="middle">2.54</text>
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="361" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;3.37× the time of the fastest library (fully validating)&#10;twitter.json: 2,606 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 2,810 µs · S&#8203;AX to Writer&#10;canada.json: 22,160 µs · Document + Writer&#10;jeopardy.json: 360,474 µs · S&#8203;AX to Writer">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;4.87× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 3,332 µs&#10;citm_catalog.json: 6,408 µs&#10;canada.json: 21,303 µs&#10;jeopardy.json: 494,208 µs">
<rect class="nj-heat-3" x="593" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">3.37</text>
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">4.87</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;2.78× the time of the fastest fully validating library&#10;way: S&#8203;AX to Writer (no encoding check)&#10;twitter.json: 1,820 µs&#10;citm_catalog.json: 2,456 µs&#10;canada.json: 21,770 µs&#10;jeopardy.json: 277,281 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<rect class="nj-heat-3" x="639" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="348" text-anchor="middle">2.78</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="361" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;0.76× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 416 µs&#10;citm_catalog.json: 1,298 µs&#10;canada.json: 2,661 µs&#10;jeopardy.json: 93,101 µs&#10;minify_json only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="348" text-anchor="middle">0.76</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;2.95× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 653 µs&#10;citm_catalog.json: 978 µs&#10;canada.json: 9,071 µs&#10;jeopardy.json: 138,832 µs">
<rect class="nj-heat-3" x="685" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">2.95</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;1.97× the time of the fastest library (fully validating)&#10;twitter.json: 379 µs · generic&#10;citm_catalog.json: 730 µs · generic&#10;canada.json: 4,088 µs · generic (strict)&#10;jeopardy.json: 133,699 µs · generic">
<rect class="nj-heat-2" x="685" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.97</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="390" text-anchor="end">Glaze</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.76× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 727 µs&#10;citm_catalog.json: 1,983 µs&#10;canada.json: 2,571 µs&#10;jeopardy.json: 76,361 µs">
<rect class="nj-heat-2" x="225" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">1.76</text>
<text class="nj-charts-rowlabel " x="216" y="390" text-anchor="end">RapidJSON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;3.37× the time of the fastest library (fully validating)&#10;twitter.json: 1,254 µs · insitu (copy)&#10;citm_catalog.json: 1,885 µs · insitu (copy)&#10;canada.json: 10,363 µs · S&#8203;AX (raw numbers)&#10;jeopardy.json: 161,392 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="225" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="390" text-anchor="middle">3.37</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;5.98× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 2,940 µs&#10;citm_catalog.json: 5,528 µs&#10;canada.json: 17,830 µs&#10;jeopardy.json: 390,814 µs">
<rect class="nj-heat-4" x="317" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="390" text-anchor="middle">5.98</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.08× the time of the fastest fully validating library&#10;twitter.json: 1,092 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,589 µs · S&#8203;AX (no encoding check)&#10;canada.json: 10,238 µs · insitu (copy) (no encoding check)&#10;jeopardy.json: 155,425 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="271" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="384" text-anchor="middle">3.08</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="397" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less&#10;5.38× the time of the fastest fully validating library&#10;twitter.json: 2,940 µs · generic (validates fully)&#10;citm_catalog.json: 5,528 µs · generic (validates fully)&#10;canada.json: 17,830 µs · generic (validates fully)&#10;jeopardy.json: 255,217 µs · lazy_json&#10;reads lazily: lazy_json reads only what you ask for and steps over the rest">
<rect class="nj-heat-4" x="363" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="384" text-anchor="middle">5.38</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="397" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;2.74× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,301 µs&#10;citm_catalog.json: 2,166 µs&#10;canada.json: 10,523 µs&#10;jeopardy.json: 162,402 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="317" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="390" text-anchor="middle">2.74</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.71× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 619 µs&#10;citm_catalog.json: 2,238 µs&#10;canada.json: 2,544 µs&#10;jeopardy.json: 96,608 µs">
<rect class="nj-heat-2" x="409" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="390" text-anchor="middle">1.71</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.52× the time of the fastest fully validating library&#10;twitter.json: 1,141 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,832 µs · S&#8203;AX (no encoding check)&#10;canada.json: 10,394 µs · insitu (copy) (no encoding check)&#10;jeopardy.json: 159,815 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="363" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="384" text-anchor="middle">2.52</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="397" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.59× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 360 µs&#10;citm_catalog.json: 412 µs&#10;canada.json: 433 µs&#10;jeopardy.json: 74,849 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<rect class="nj-heat-0" x="455" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="384" text-anchor="middle">0.59</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="397" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;3.31× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,405 µs&#10;citm_catalog.json: 1,895 µs&#10;canada.json: 10,256 µs&#10;jeopardy.json: 165,022 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="409" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="390" text-anchor="middle">3.31</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;5.05× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 3,547 µs&#10;citm_catalog.json: 6,080 µs&#10;canada.json: 22,146 µs&#10;jeopardy.json: 937,712 µs">
<rect class="nj-heat-4" x="501" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">5.05</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.09× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 1,218 µs&#10;citm_catalog.json: 1,841 µs&#10;canada.json: 9,991 µs&#10;jeopardy.json: 153,824 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="455" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="384" text-anchor="middle">3.09</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="397" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;4.82× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 3,394 µs&#10;citm_catalog.json: 6,016 µs&#10;canada.json: 23,223 µs&#10;jeopardy.json: 512,061 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;2.78× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,981 µs&#10;citm_catalog.json: 2,969 µs&#10;canada.json: 19,675 µs&#10;jeopardy.json: 306,064 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="523.5" y="390" text-anchor="middle">2.78</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;2.66× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 1,824 µs&#10;citm_catalog.json: 2,810 µs&#10;canada.json: 19,176 µs&#10;jeopardy.json: 301,160 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="547" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="568.5" y="384" text-anchor="middle">2.66</text>
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="397" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;3.39× the time of the fastest library (fully validating)&#10;twitter.json: 2,458 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 2,873 µs · S&#8203;AX to Writer&#10;canada.json: 21,009 µs · Document + Writer&#10;jeopardy.json: 353,444 µs · S&#8203;AX to Writer">
<rect class="nj-heat-3" x="593" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="390" text-anchor="middle">4.82</text>
<text class="nj-charts-cell" x="615.5" y="390" text-anchor="middle">3.39</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;0.75× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 419 µs&#10;citm_catalog.json: 1,301 µs&#10;canada.json: 2,832 µs&#10;jeopardy.json: 92,190 µs&#10;minify_json only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="384" text-anchor="middle">0.75</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="397" text-anchor="middle">P</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;2.81× the time of the fastest fully validating library&#10;twitter.json: 1,764 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 2,494 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 20,766 µs · Document + Writer (no encoding check)&#10;jeopardy.json: 271,282 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<rect class="nj-heat-3" x="639" y="369" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="384" text-anchor="middle">2.81</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="397" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;1.90× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 367 µs&#10;citm_catalog.json: 688 µs&#10;canada.json: 4,097 µs&#10;jeopardy.json: 134,165 µs">
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">1.90</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;2.93× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 649 µs&#10;citm_catalog.json: 974 µs&#10;canada.json: 9,080 µs&#10;jeopardy.json: 129,698 µs">
<rect class="nj-heat-3" x="685" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">2.93</text>
</g>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="426" text-anchor="end">nlohmann/json json</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;2.06× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 817 µs&#10;citm_catalog.json: 1,614 µs&#10;canada.json: 4,402 µs&#10;jeopardy.json: 92,387 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;2.08× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 792 µs&#10;citm_catalog.json: 1,585 µs&#10;canada.json: 4,678 µs&#10;jeopardy.json: 98,338 µs">
<rect class="nj-heat-2" x="225" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="426" text-anchor="middle">2.06</text>
<text class="nj-charts-cell" x="270" y="426" text-anchor="middle">2.08</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.67× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 790 µs&#10;citm_catalog.json: 1,624 µs&#10;canada.json: 5,671 µs&#10;jeopardy.json: 93,964 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.70× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 801 µs&#10;citm_catalog.json: 1,705 µs&#10;canada.json: 5,532 µs&#10;jeopardy.json: 94,952 µs">
<rect class="nj-heat-2" x="317" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="426" text-anchor="middle">1.67</text>
<text class="nj-charts-cell" x="362" y="426" text-anchor="middle">1.70</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;7.98× the time of the fastest library (fully validating)&#10;twitter.json: 3,643 µs · structs (from_json)&#10;citm_catalog.json: 6,199 µs · structs (from_json)&#10;canada.json: 11,694 µs · structs (from_json)&#10;jeopardy.json: 605,646 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;7.88× the time of the fastest library (fully validating)&#10;twitter.json: 3,693 µs · structs (from_json)&#10;citm_catalog.json: 5,596 µs · parse&#10;canada.json: 11,689 µs · parse&#10;jeopardy.json: 601,495 µs · parse">
<rect class="nj-heat-4" x="409" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="426" text-anchor="middle">7.98</text>
<text class="nj-charts-cell" x="454" y="426" text-anchor="middle">7.88</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;4.16× the time of the fastest library (fully validating)&#10;way: ordered_json&#10;twitter.json: 3,046 µs&#10;citm_catalog.json: 5,087 µs&#10;canada.json: 15,464 µs&#10;jeopardy.json: 863,465 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;4.26× the time of the fastest library (fully validating)&#10;way: ordered_json&#10;twitter.json: 2,914 µs&#10;citm_catalog.json: 5,182 µs&#10;canada.json: 15,284 µs&#10;jeopardy.json: 842,581 µs">
<rect class="nj-heat-3" x="501" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="426" text-anchor="middle">4.16</text>
<text class="nj-charts-cell" x="546" y="426" text-anchor="middle">4.26</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;5.23× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 4,168 µs&#10;citm_catalog.json: 6,253 µs&#10;canada.json: 16,656 µs&#10;jeopardy.json: 777,125 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;5.18× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 3,822 µs&#10;citm_catalog.json: 6,431 µs&#10;canada.json: 15,804 µs&#10;jeopardy.json: 737,629 µs">
<rect class="nj-heat-4" x="593" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="426" text-anchor="middle">5.23</text>
<text class="nj-charts-cell" x="638" y="426" text-anchor="middle">5.18</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;1.87× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 433 µs&#10;citm_catalog.json: 607 µs&#10;canada.json: 3,896 µs&#10;jeopardy.json: 126,529 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;1.85× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 431 µs&#10;citm_catalog.json: 605 µs&#10;canada.json: 3,894 µs&#10;jeopardy.json: 116,689 µs">
<rect class="nj-heat-2" x="685" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">1.87</text>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">1.85</text>
</g>
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

@@ -1,6 +1,6 @@
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-x86-gcc13 nj-blog-uc-x86-gcc13-d" xmlns="http://www.w3.org/2000/svg">
<title id="nj-blog-uc-x86-gcc13">Use cases: time of each library relative to the fastest, x86-64 with G&#8203;CC 13</title>
<desc id="nj-blog-uc-x86-gcc13-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.11; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.68; yyjson sum: 1.47; yyjson select: 1.63; yyjson edit: 1.56; yyjson minify: 1.35; yyjson write: 1.14; sonic-rs (Rust) validate: 1.12; sonic-rs (Rust) sum: 1.14; sonic-rs (Rust) select: 1.28; sonic-rs (Rust) edit: 1.88; sonic-rs (Rust) minify: 1.65; sonic-rs (Rust) write: 1.94; simdjson validate: 1.31; simdjson sum: 1.00; simdjson select: 1.30 (0.69 checking less, partial); simdjson edit: n/a; simdjson minify: 1.86 (0.21 checking less, partial); simdjson write: 2.86; sonic-cpp validate: no fully validating way (1.45 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.32 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (1.42 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.22 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (1.36 checking less, no U&#8203;TF-8); sonic-cpp write: 1.50; Boost.J&#8203;SON validate: 1.62; Boost.J&#8203;SON sum: 1.32; Boost.J&#8203;SON select: 3.26; Boost.J&#8203;SON edit: 2.44; Boost.J&#8203;SON minify: 2.70; Boost.J&#8203;SON write: 2.39; simd-json (Rust) validate: 2.17; simd-json (Rust) sum: 1.98; simd-json (Rust) select: 2.44; simd-json (Rust) edit: 3.03; simd-json (Rust) minify: 3.27; simd-json (Rust) write: 2.17; serde_json (Rust) validate: 1.43 (1.28 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.37; serde_json (Rust) select: 1.62; serde_json (Rust) edit: 4.96; serde_json (Rust) minify: 5.01; serde_json (Rust) write: 2.12; Glaze validate: 1.33; Glaze sum: 6.46 (5.20 checking less, partial); Glaze select: 1.35 (0.58 checking less, partial); Glaze edit: 5.23; Glaze minify: 5.12 (0.70 checking less, partial); Glaze write: 1.92; nlohmann/json json validate: 2.00; nlohmann/json json sum: 1.73; nlohmann/json json select: 7.68; nlohmann/json json edit: 4.27; nlohmann/json json minify: 5.15; nlohmann/json json write: 1.88; RapidJSON validate: 3.97 (3.13 checking less, no U&#8203;TF-8); RapidJSON sum: 3.21 (2.54 checking less, no U&#8203;TF-8); RapidJSON select: 3.98 (3.24 checking less, no U&#8203;TF-8); RapidJSON edit: 3.02 (2.63 checking less, no U&#8203;TF-8); RapidJSON minify: 3.65 (2.79 checking less, no U&#8203;TF-8); RapidJSON write: 3.05.</desc>
<desc id="nj-blog-uc-x86-gcc13-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.12; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.34; yyjson sum: 1.47; yyjson select: 1.29; yyjson edit: 1.52; yyjson minify: 1.34; yyjson write: 1.08; sonic-cpp validate: no fully validating way (1.40 checking less, no U&#8203;TF-8); sonic-cpp sum: no fully validating way (1.33 checking less, no U&#8203;TF-8); sonic-cpp select: no fully validating way (1.42 checking less, no U&#8203;TF-8); sonic-cpp edit: no fully validating way (1.22 checking less, no U&#8203;TF-8); sonic-cpp minify: no fully validating way (1.36 checking less, no U&#8203;TF-8); sonic-cpp write: 1.48; simdjson validate: 1.26; simdjson sum: 1.00; simdjson select: 1.23 (0.53 checking less, partial); simdjson edit: n/a; simdjson minify: 1.54 (0.21 checking less, partial); simdjson write: 2.17; sonic-rs (Rust) validate: 1.16; sonic-rs (Rust) sum: 1.13; sonic-rs (Rust) select: 1.27; sonic-rs (Rust) edit: 1.88; sonic-rs (Rust) minify: 1.68; sonic-rs (Rust) write: 1.98; Boost.J&#8203;SON validate: 1.18; Boost.J&#8203;SON sum: 1.32; Boost.J&#8203;SON select: 2.15; Boost.J&#8203;SON edit: 2.44; Boost.J&#8203;SON minify: 2.64; Boost.J&#8203;SON write: 2.38; simd-json (Rust) validate: 2.17; simd-json (Rust) sum: 1.94; simd-json (Rust) select: 2.50; simd-json (Rust) edit: 2.97; simd-json (Rust) minify: 3.36; simd-json (Rust) write: 2.20; serde_json (Rust) validate: 1.44 (1.30 checking less, no U&#8203;TF-8); serde_json (Rust) sum: 2.36; serde_json (Rust) select: 1.66; serde_json (Rust) edit: 4.84; serde_json (Rust) minify: 5.12; serde_json (Rust) write: 2.15; Glaze validate: 1.33; Glaze sum: 4.42 (4.12 checking less, partial); Glaze select: 1.34 (0.55 checking less, partial); Glaze edit: 4.91; Glaze minify: 4.96 (0.70 checking less, partial); Glaze write: 1.74; nlohmann/json json validate: 2.01; nlohmann/json json sum: 1.75; nlohmann/json json select: 7.62; nlohmann/json json edit: 4.15; nlohmann/json json minify: 4.94; nlohmann/json json write: 1.86; RapidJSON validate: 3.89 (3.04 checking less, no U&#8203;TF-8); RapidJSON sum: 3.27 (2.57 checking less, no U&#8203;TF-8); RapidJSON select: 3.84 (3.14 checking less, no U&#8203;TF-8); RapidJSON edit: 2.99 (2.65 checking less, no U&#8203;TF-8); RapidJSON minify: 3.57 (2.81 checking less, no U&#8203;TF-8); RapidJSON write: 2.97.</desc>
<text class="nj-charts-tick" x="270" y="34">validate</text>
<text class="nj-charts-tick" x="362" y="34">sum</text>
<text class="nj-charts-tick" x="454" y="34">select</text>
@@ -8,339 +8,339 @@
<text class="nj-charts-tick" x="638" y="34">minify</text>
<text class="nj-charts-tick" x="730" y="34">write</text>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 325 µs · parse&#10;citm_catalog.json: 742 µs · parse&#10;canada.json: 1,699 µs · accept&#10;jeopardy.json: 84,790 µs · accept">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 332 µs · parse&#10;citm_catalog.json: 764 µs · accept&#10;canada.json: 1,691 µs · accept&#10;jeopardy.json: 82,408 µs · accept">
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.11× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 405 µs&#10;citm_catalog.json: 945 µs&#10;canada.json: 4,038 µs&#10;jeopardy.json: 87,781 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum&#10;1.12× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 410 µs&#10;citm_catalog.json: 960 µs&#10;canada.json: 4,026 µs&#10;jeopardy.json: 91,857 µs">
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.11</text>
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.12</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 347 µs · structs (from_json)&#10;citm_catalog.json: 763 µs · parse&#10;canada.json: 1,700 µs · parse&#10;jeopardy.json: 98,540 µs · parse">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select&#10;1.00× the time of the fastest library (fully validating)&#10;twitter.json: 361 µs · structs (from_json)&#10;citm_catalog.json: 788 µs · parse&#10;canada.json: 1,693 µs · structs (from_json)&#10;jeopardy.json: 92,200 µs · parse">
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 552 µs&#10;citm_catalog.json: 1,112 µs&#10;canada.json: 6,027 µs&#10;jeopardy.json: 203,217 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit&#10;1.00× the time of the fastest library (fully validating)&#10;way: editable&#10;twitter.json: 630 µs&#10;citm_catalog.json: 1,128 µs&#10;canada.json: 5,910 µs&#10;jeopardy.json: 184,135 µs">
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 497 µs&#10;citm_catalog.json: 1,028 µs&#10;canada.json: 5,930 µs&#10;jeopardy.json: 156,014 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify&#10;1.00× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 503 µs&#10;citm_catalog.json: 1,045 µs&#10;canada.json: 5,569 µs&#10;jeopardy.json: 156,948 µs">
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 153 µs&#10;citm_catalog.json: 271 µs&#10;canada.json: 3,934 µs&#10;jeopardy.json: 72,106 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write&#10;1.00× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 153 µs&#10;citm_catalog.json: 272 µs&#10;canada.json: 3,979 µs&#10;jeopardy.json: 68,836 µs">
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.68× the time of the fastest library (fully validating)&#10;twitter.json: 390 µs · insitu (copy)&#10;citm_catalog.json: 995 µs · insitu (copy)&#10;canada.json: 5,320 µs · read&#10;jeopardy.json: 132,598 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="225" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.68</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate&#10;1.34× the time of the fastest library (fully validating)&#10;twitter.json: 393 µs · insitu (copy)&#10;citm_catalog.json: 988 µs · read (raw numbers)&#10;canada.json: 2,211 µs · read (raw numbers)&#10;jeopardy.json: 131,844 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="225" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.47× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 447 µs&#10;citm_catalog.json: 1,148 µs&#10;canada.json: 5,959 µs&#10;jeopardy.json: 138,001 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum&#10;1.47× the time of the fastest library (fully validating)&#10;twitter.json: 447 µs · insitu (copy)&#10;citm_catalog.json: 1,146 µs · insitu (copy)&#10;canada.json: 6,051 µs · insitu (copy)&#10;jeopardy.json: 137,148 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="317" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.47</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.63× the time of the fastest library (fully validating)&#10;twitter.json: 408 µs · insitu (copy)&#10;citm_catalog.json: 996 µs · insitu (copy)&#10;canada.json: 5,375 µs · insitu (copy)&#10;jeopardy.json: 142,713 µs · read&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="409" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.63</text>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select&#10;1.29× the time of the fastest library (fully validating)&#10;twitter.json: 404 µs · read&#10;citm_catalog.json: 1,000 µs · read&#10;canada.json: 2,214 µs · read (raw numbers)&#10;jeopardy.json: 139,234 µs · read (raw numbers)">
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.29</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.56× the time of the fastest library (fully validating)&#10;twitter.json: 810 µs · insitu (copy) + mut copy&#10;citm_catalog.json: 1,724 µs · insitu (copy) + mut copy&#10;canada.json: 9,806 µs · mut copy&#10;jeopardy.json: 322,621 µs · insitu (copy) + mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit&#10;1.52× the time of the fastest library (fully validating)&#10;twitter.json: 824 µs · mut copy&#10;citm_catalog.json: 1,729 µs · insitu (copy) + mut copy&#10;canada.json: 9,727 µs · insitu (copy) + mut copy&#10;jeopardy.json: 299,300 µs · mut copy&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="501" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.56</text>
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.52</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.35× the time of the fastest library (fully validating)&#10;twitter.json: 657 µs · insitu (copy) + write&#10;citm_catalog.json: 1,326 µs · read + write&#10;canada.json: 9,202 µs · insitu (copy) + write&#10;jeopardy.json: 195,618 µs · read + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify&#10;1.34× the time of the fastest library (fully validating)&#10;twitter.json: 605 µs · read + write&#10;citm_catalog.json: 1,323 µs · read + write&#10;canada.json: 9,272 µs · insitu (copy) + write&#10;jeopardy.json: 200,777 µs · insitu (copy) + write&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.35</text>
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.14× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 216 µs&#10;citm_catalog.json: 331 µs&#10;canada.json: 3,620 µs&#10;jeopardy.json: 76,733 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write&#10;1.08× the time of the fastest library (fully validating)&#10;way: write&#10;twitter.json: 180 µs&#10;citm_catalog.json: 330 µs&#10;canada.json: 3,620 µs&#10;jeopardy.json: 70,502 µs">
<rect class="nj-heat-0" x="685" y="81" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.14</text>
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.08</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.12× the time of the fastest library (fully validating)&#10;way: IgnoredAny&#10;twitter.json: 470 µs&#10;citm_catalog.json: 966 µs&#10;canada.json: 2,249 µs&#10;jeopardy.json: 54,246 µs">
<rect class="nj-heat-0" x="225" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.12</text>
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;1.40× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 407 µs&#10;citm_catalog.json: 1,022 µs&#10;canada.json: 3,560 µs&#10;jeopardy.json: 90,971 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="225" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="132" text-anchor="middle">1.40</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.14× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 494 µs&#10;citm_catalog.json: 1,135 µs&#10;canada.json: 4,580 µs&#10;jeopardy.json: 59,149 µs">
<rect class="nj-heat-0" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.14</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.33× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 478 µs&#10;citm_catalog.json: 1,234 µs&#10;canada.json: 4,454 µs&#10;jeopardy.json: 109,509 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="317" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="132" text-anchor="middle">1.33</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.28× the time of the fastest library (fully validating)&#10;way: structs&#10;twitter.json: 557 µs&#10;citm_catalog.json: 1,023 µs&#10;canada.json: 2,247 µs&#10;jeopardy.json: 91,996 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;1.42× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 453 µs&#10;citm_catalog.json: 1,041 µs&#10;canada.json: 3,639 µs&#10;jeopardy.json: 106,529 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="409" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.28</text>
<text class="nj-charts-cell" x="454" y="132" text-anchor="middle">1.42</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;1.88× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,189 µs&#10;citm_catalog.json: 2,384 µs&#10;canada.json: 8,007 µs&#10;jeopardy.json: 413,714 µs">
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">1.88</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.22× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 662 µs&#10;citm_catalog.json: 1,560 µs&#10;canada.json: 8,647 µs&#10;jeopardy.json: 191,340 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="501" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="132" text-anchor="middle">1.22</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.65× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 988 µs&#10;citm_catalog.json: 2,093 µs&#10;canada.json: 7,775 µs&#10;jeopardy.json: 217,697 µs">
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.65</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;1.36× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 640 µs&#10;citm_catalog.json: 1,558 µs&#10;canada.json: 8,901 µs&#10;jeopardy.json: 175,992 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="593" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="132" text-anchor="middle">1.36</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="145" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;1.94× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 442 µs&#10;citm_catalog.json: 935 µs&#10;canada.json: 3,954 µs&#10;jeopardy.json: 100,889 µs">
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.94</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.48× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 262 µs&#10;citm_catalog.json: 532 µs&#10;canada.json: 5,268 µs&#10;jeopardy.json: 74,547 µs">
<rect class="nj-heat-1" x="685" y="117" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.48</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.31× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 328 µs&#10;citm_catalog.json: 810 µs&#10;canada.json: 3,178 µs&#10;jeopardy.json: 121,064 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate&#10;1.26× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 312 µs&#10;citm_catalog.json: 730 µs&#10;canada.json: 3,166 µs&#10;jeopardy.json: 123,620 µs">
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.31</text>
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.26</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: On-Demand&#10;twitter.json: 358 µs&#10;citm_catalog.json: 817 µs&#10;canada.json: 3,407 µs&#10;jeopardy.json: 90,338 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum&#10;1.00× the time of the fastest library (fully validating)&#10;way: On-Demand&#10;twitter.json: 360 µs&#10;citm_catalog.json: 819 µs&#10;canada.json: 3,269 µs&#10;jeopardy.json: 95,622 µs">
<rect class="nj-heat-0" x="317" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.00</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.30× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 337 µs&#10;citm_catalog.json: 837 µs&#10;canada.json: 3,283 µs&#10;jeopardy.json: 134,701 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select&#10;1.23× the time of the fastest library (fully validating)&#10;way: D&#8203;OM&#10;twitter.json: 348 µs&#10;citm_catalog.json: 740 µs&#10;canada.json: 3,170 µs&#10;jeopardy.json: 124,766 µs">
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.30</text>
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.23</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.69× the time of the fastest fully validating library&#10;way: On-Demand&#10;twitter.json: 211 µs&#10;citm_catalog.json: 804 µs&#10;canada.json: 1,138 µs&#10;jeopardy.json: 51,878 µs&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less&#10;0.53× the time of the fastest fully validating library&#10;twitter.json: 190 µs · On-Demand (key selectors)&#10;citm_catalog.json: 498 µs · On-Demand (key selectors)&#10;canada.json: 726 µs · On-Demand&#10;jeopardy.json: 49,901 µs · On-Demand (key selectors)&#10;reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.69</text>
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.53</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit&#10;simdjson&#x27;s documents are read-only: it has no A&#8203;PI to change a value and write the result">
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-tick" x="546" y="174">n/a</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;1.86× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 839 µs&#10;citm_catalog.json: 1,588 µs&#10;canada.json: 14,645 µs&#10;jeopardy.json: 292,317 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify&#10;1.54× the time of the fastest library (fully validating)&#10;way: D&#8203;OM + to_string&#10;twitter.json: 792 µs&#10;citm_catalog.json: 1,348 µs&#10;canada.json: 8,324 µs&#10;jeopardy.json: 290,206 µs">
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.86</text>
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.54</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.21× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 128 µs&#10;citm_catalog.json: 322 µs&#10;canada.json: 469 µs&#10;jeopardy.json: 50,456 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less&#10;0.21× the time of the fastest fully validating library&#10;way: minify&#10;twitter.json: 128 µs&#10;citm_catalog.json: 331 µs&#10;canada.json: 464 µs&#10;jeopardy.json: 47,486 µs&#10;simdjson::minify() only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.21</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;2.86× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 491 µs&#10;citm_catalog.json: 750 µs&#10;canada.json: 10,840 µs&#10;jeopardy.json: 196,092 µs">
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.86</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write&#10;2.17× the time of the fastest library (fully validating)&#10;way: to_string&#10;twitter.json: 451 µs&#10;citm_catalog.json: 598 µs&#10;canada.json: 5,334 µs&#10;jeopardy.json: 174,144 µs">
<rect class="nj-heat-2" x="685" y="153" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.17</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less&#10;1.45× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 425 µs&#10;citm_catalog.json: 1,032 µs&#10;canada.json: 3,618 µs&#10;jeopardy.json: 95,772 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-rs (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate&#10;1.16× the time of the fastest library (fully validating)&#10;way: IgnoredAny&#10;twitter.json: 482 µs&#10;citm_catalog.json: 969 µs&#10;canada.json: 2,489 µs&#10;jeopardy.json: 55,486 µs">
<rect class="nj-heat-1" x="225" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">1.45</text>
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="270" y="210" text-anchor="middle">1.16</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less&#10;1.32× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 482 µs&#10;citm_catalog.json: 1,234 µs&#10;canada.json: 4,412 µs&#10;jeopardy.json: 105,062 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="317" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.32</text>
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum&#10;1.13× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 503 µs&#10;citm_catalog.json: 1,123 µs&#10;canada.json: 4,418 µs&#10;jeopardy.json: 59,993 µs">
<rect class="nj-heat-0" x="317" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="210" text-anchor="middle">1.13</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less&#10;1.42× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 419 µs&#10;citm_catalog.json: 1,044 µs&#10;canada.json: 3,675 µs&#10;jeopardy.json: 111,999 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select&#10;1.27× the time of the fastest library (fully validating)&#10;way: structs&#10;twitter.json: 538 µs&#10;citm_catalog.json: 1,028 µs&#10;canada.json: 2,283 µs&#10;jeopardy.json: 91,950 µs">
<rect class="nj-heat-1" x="409" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">1.42</text>
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
<text class="nj-charts-cell" x="454" y="210" text-anchor="middle">1.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less&#10;1.22× the time of the fastest fully validating library&#10;way: Document&#10;twitter.json: 663 µs&#10;citm_catalog.json: 1,572 µs&#10;canada.json: 8,879 µs&#10;jeopardy.json: 181,438 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.22</text>
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit&#10;1.88× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,201 µs&#10;citm_catalog.json: 2,416 µs&#10;canada.json: 7,958 µs&#10;jeopardy.json: 421,718 µs">
<rect class="nj-heat-2" x="501" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="210" text-anchor="middle">1.88</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less&#10;1.36× the time of the fastest fully validating library&#10;way: Document + Serialize&#10;twitter.json: 667 µs&#10;citm_catalog.json: 1,568 µs&#10;canada.json: 9,007 µs&#10;jeopardy.json: 174,144 µs&#10;trusts U&#8203;TF-8: sonic-cpp 1.0.2 doesn&#x27;t check it">
<rect class="nj-heat-1" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">1.36</text>
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify&#10;1.68× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 1,003 µs&#10;citm_catalog.json: 2,174 µs&#10;canada.json: 7,753 µs&#10;jeopardy.json: 217,354 µs">
<rect class="nj-heat-2" x="593" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="210" text-anchor="middle">1.68</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write&#10;1.50× the time of the fastest library (fully validating)&#10;way: Serialize&#10;twitter.json: 270 µs&#10;citm_catalog.json: 533 µs&#10;canada.json: 5,100 µs&#10;jeopardy.json: 80,556 µs">
<rect class="nj-heat-1" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.50</text>
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write&#10;1.98× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 445 µs&#10;citm_catalog.json: 931 µs&#10;canada.json: 4,048 µs&#10;jeopardy.json: 104,487 µs">
<rect class="nj-heat-2" x="685" y="189" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.98</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">Boost.J&#8203;SON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;1.62× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 738 µs&#10;citm_catalog.json: 1,007 µs&#10;canada.json: 5,465 µs&#10;jeopardy.json: 59,249 µs">
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.62</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · validate&#10;1.18× the time of the fastest library (fully validating)&#10;twitter.json: 725 µs · S&#8203;AX&#10;citm_catalog.json: 924 µs · S&#8203;AX (numbers: none)&#10;canada.json: 1,637 µs · S&#8203;AX (numbers: none)&#10;jeopardy.json: 62,571 µs · S&#8203;AX">
<rect class="nj-heat-1" x="225" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.18</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.32× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 753 µs&#10;citm_catalog.json: 1,030 µs&#10;canada.json: 5,688 µs&#10;jeopardy.json: 61,479 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · sum&#10;1.32× the time of the fastest library (fully validating)&#10;way: S&#8203;AX&#10;twitter.json: 748 µs&#10;citm_catalog.json: 1,018 µs&#10;canada.json: 5,668 µs&#10;jeopardy.json: 64,462 µs">
<rect class="nj-heat-1" x="317" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.32</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;3.26× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 1,605 µs&#10;citm_catalog.json: 1,903 µs&#10;canada.json: 7,605 µs&#10;jeopardy.json: 214,973 µs">
<rect class="nj-heat-3" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">3.26</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · select&#10;2.15× the time of the fastest library (fully validating)&#10;way: parse_into structs&#10;twitter.json: 973 µs&#10;citm_catalog.json: 1,358 µs&#10;canada.json: 6,913 µs&#10;jeopardy.json: 103,145 µs">
<rect class="nj-heat-2" x="409" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">2.15</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;2.44× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 2,026 µs&#10;citm_catalog.json: 2,943 µs&#10;canada.json: 13,352 µs&#10;jeopardy.json: 337,632 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · edit&#10;2.44× the time of the fastest library (fully validating)&#10;way: parse&#10;twitter.json: 2,086 µs&#10;citm_catalog.json: 2,928 µs&#10;canada.json: 13,189 µs&#10;jeopardy.json: 340,875 µs">
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.44</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;2.70× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,931 µs&#10;citm_catalog.json: 2,902 µs&#10;canada.json: 13,756 µs&#10;jeopardy.json: 328,321 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · minify&#10;2.64× the time of the fastest library (fully validating)&#10;way: parse + serialize&#10;twitter.json: 1,911 µs&#10;citm_catalog.json: 2,840 µs&#10;canada.json: 13,417 µs&#10;jeopardy.json: 307,134 µs">
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.70</text>
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.64</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;2.39× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 478 µs&#10;citm_catalog.json: 1,015 µs&#10;canada.json: 5,750 µs&#10;jeopardy.json: 137,840 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J&#8203;SON · write&#10;2.38× the time of the fastest library (fully validating)&#10;way: serialize&#10;twitter.json: 459 µs&#10;citm_catalog.json: 1,012 µs&#10;canada.json: 6,253 µs&#10;jeopardy.json: 126,330 µs">
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.39</text>
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.38</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">simd-json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;2.17× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 592 µs&#10;citm_catalog.json: 1,426 µs&#10;canada.json: 4,303 µs&#10;jeopardy.json: 211,716 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate&#10;2.17× the time of the fastest library (fully validating)&#10;way: tape (copy)&#10;twitter.json: 563 µs&#10;citm_catalog.json: 1,403 µs&#10;canada.json: 4,630 µs&#10;jeopardy.json: 212,467 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.17</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.98× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 722 µs&#10;citm_catalog.json: 1,686 µs&#10;canada.json: 5,191 µs&#10;jeopardy.json: 220,582 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum&#10;1.94× the time of the fastest library (fully validating)&#10;way: visitor (copy)&#10;twitter.json: 668 µs&#10;citm_catalog.json: 1,688 µs&#10;canada.json: 5,134 µs&#10;jeopardy.json: 224,411 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="317" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.98</text>
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.94</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.44× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 730 µs&#10;citm_catalog.json: 1,658 µs&#10;canada.json: 4,915 µs&#10;jeopardy.json: 266,073 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select&#10;2.50× the time of the fastest library (fully validating)&#10;way: structs (copy)&#10;twitter.json: 740 µs&#10;citm_catalog.json: 1,802 µs&#10;canada.json: 4,997 µs&#10;jeopardy.json: 258,566 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-2" x="409" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.44</text>
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.50</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;3.03× the time of the fastest library (fully validating)&#10;twitter.json: 2,071 µs · borrowed (copy)&#10;citm_catalog.json: 4,465 µs · borrowed (copy)&#10;canada.json: 16,360 µs · owned (copy)&#10;jeopardy.json: 416,658 µs · borrowed (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit&#10;2.97× the time of the fastest library (fully validating)&#10;twitter.json: 1,924 µs · borrowed (copy)&#10;citm_catalog.json: 4,575 µs · borrowed (copy)&#10;canada.json: 15,746 µs · owned (copy)&#10;jeopardy.json: 435,817 µs · borrowed (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.03</text>
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">2.97</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.27× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 1,924 µs&#10;citm_catalog.json: 4,375 µs&#10;canada.json: 15,278 µs&#10;jeopardy.json: 419,474 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify&#10;3.36× the time of the fastest library (fully validating)&#10;way: borrowed (copy)&#10;twitter.json: 1,878 µs&#10;citm_catalog.json: 4,655 µs&#10;canada.json: 15,955 µs&#10;jeopardy.json: 419,412 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="593" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.27</text>
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.36</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;2.17× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 604 µs&#10;citm_catalog.json: 809 µs&#10;canada.json: 4,825 µs&#10;jeopardy.json: 110,710 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write&#10;2.20× the time of the fastest library (fully validating)&#10;way: borrowed&#10;twitter.json: 597 µs&#10;citm_catalog.json: 809 µs&#10;canada.json: 4,817 µs&#10;jeopardy.json: 114,245 µs">
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.17</text>
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.20</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">serde_json (Rust)</text>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;1.43× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 634 µs&#10;citm_catalog.json: 1,448 µs&#10;canada.json: 2,402 µs&#10;jeopardy.json: 66,822 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate&#10;1.44× the time of the fastest library (fully validating)&#10;way: from_utf8 + IgnoredAny&#10;twitter.json: 622 µs&#10;citm_catalog.json: 1,440 µs&#10;canada.json: 2,621 µs&#10;jeopardy.json: 65,602 µs">
<rect class="nj-heat-1" x="225" y="297" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.43</text>
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.44</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;1.28× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 487 µs&#10;citm_catalog.json: 1,370 µs&#10;canada.json: 2,318 µs&#10;jeopardy.json: 59,801 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less&#10;1.30× the time of the fastest fully validating library&#10;way: IgnoredAny&#10;twitter.json: 480 µs&#10;citm_catalog.json: 1,371 µs&#10;canada.json: 2,538 µs&#10;jeopardy.json: 60,154 µs&#10;trusts U&#8203;TF-8 in the strings it skips (from_slice); strings it reads are checked">
<rect class="nj-heat-1" x="271" y="297" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.28</text>
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.30</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="325" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.37× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 1,318 µs&#10;citm_catalog.json: 2,299 µs&#10;canada.json: 7,610 µs&#10;jeopardy.json: 123,810 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum&#10;2.36× the time of the fastest library (fully validating)&#10;way: visitor&#10;twitter.json: 1,311 µs&#10;citm_catalog.json: 2,316 µs&#10;canada.json: 7,241 µs&#10;jeopardy.json: 130,249 µs">
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.37</text>
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.36</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;1.62× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 769 µs&#10;citm_catalog.json: 1,504 µs&#10;canada.json: 2,442 µs&#10;jeopardy.json: 108,386 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select&#10;1.66× the time of the fastest library (fully validating)&#10;way: from_utf8 + structs&#10;twitter.json: 722 µs&#10;citm_catalog.json: 1,559 µs&#10;canada.json: 2,585 µs&#10;jeopardy.json: 114,701 µs">
<rect class="nj-heat-2" x="409" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.62</text>
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.66</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;4.96× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,474 µs&#10;citm_catalog.json: 6,922 µs&#10;canada.json: 18,301 µs&#10;jeopardy.json: 805,290 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit&#10;4.84× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,036 µs&#10;citm_catalog.json: 7,181 µs&#10;canada.json: 17,371 µs&#10;jeopardy.json: 843,034 µs">
<rect class="nj-heat-3" x="501" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">4.96</text>
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">4.84</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.01× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,081 µs&#10;citm_catalog.json: 6,880 µs&#10;canada.json: 17,249 µs&#10;jeopardy.json: 615,033 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify&#10;5.12× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 4,220 µs&#10;citm_catalog.json: 6,876 µs&#10;canada.json: 17,276 µs&#10;jeopardy.json: 628,192 µs">
<rect class="nj-heat-4" x="593" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.01</text>
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.12</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.12× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 563 µs&#10;citm_catalog.json: 882 µs&#10;canada.json: 3,979 µs&#10;jeopardy.json: 120,716 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write&#10;2.15× the time of the fastest library (fully validating)&#10;way: Value&#10;twitter.json: 560 µs&#10;citm_catalog.json: 848 µs&#10;canada.json: 3,964 µs&#10;jeopardy.json: 129,473 µs">
<rect class="nj-heat-2" x="685" y="297" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.12</text>
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.15</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">Glaze</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.33× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 590 µs&#10;citm_catalog.json: 1,399 µs&#10;canada.json: 1,847 µs&#10;jeopardy.json: 71,293 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate&#10;1.33× the time of the fastest library (fully validating)&#10;way: validate_json&#10;twitter.json: 597 µs&#10;citm_catalog.json: 1,407 µs&#10;canada.json: 1,844 µs&#10;jeopardy.json: 71,646 µs">
<rect class="nj-heat-1" x="225" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="354" text-anchor="middle">1.33</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;6.46× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 3,206 µs&#10;citm_catalog.json: 5,928 µs&#10;canada.json: 20,405 µs&#10;jeopardy.json: 403,975 µs">
<rect class="nj-heat-4" x="317" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">6.46</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum&#10;4.42× the time of the fastest library (fully validating)&#10;way: generic (double, strict)&#10;twitter.json: 2,399 µs&#10;citm_catalog.json: 4,212 µs&#10;canada.json: 11,369 µs&#10;jeopardy.json: 307,211 µs">
<rect class="nj-heat-3" x="317" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">4.42</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less&#10;5.20× the time of the fastest fully validating library&#10;twitter.json: 2,948 µs · lazy_json&#10;citm_catalog.json: 5,928 µs · generic (validates fully)&#10;canada.json: 16,203 µs · lazy_json&#10;jeopardy.json: 231,683 µs · lazy_json&#10;reads lazily: lazy_json reads only what you ask for and steps over the rest">
<rect class="nj-heat-4" x="363" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">5.20</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less&#10;4.12× the time of the fastest fully validating library&#10;twitter.json: 2,399 µs · generic (double, strict) (validates fully)&#10;citm_catalog.json: 4,141 µs · generic (double)&#10;canada.json: 11,369 µs · generic (double, strict) (validates fully)&#10;jeopardy.json: 236,277 µs · lazy_json&#10;accepts trailing garbage after the value: Glaze&#x27;s default (validate_trailing_whitespace checks it)&#10;reads lazily: lazy_json reads only what you ask for and steps over the rest">
<rect class="nj-heat-3" x="363" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">4.12</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.35× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 539 µs&#10;citm_catalog.json: 1,475 µs&#10;canada.json: 1,850 µs&#10;jeopardy.json: 99,194 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select&#10;1.34× the time of the fastest library (fully validating)&#10;way: structs (validate_skipped)&#10;twitter.json: 595 µs&#10;citm_catalog.json: 1,500 µs&#10;canada.json: 1,854 µs&#10;jeopardy.json: 86,510 µs">
<rect class="nj-heat-1" x="409" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">1.35</text>
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">1.34</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.58× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 348 µs&#10;citm_catalog.json: 408 µs&#10;canada.json: 449 µs&#10;jeopardy.json: 77,565 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less&#10;0.55× the time of the fastest fully validating library&#10;way: structs&#10;twitter.json: 340 µs&#10;citm_catalog.json: 403 µs&#10;canada.json: 447 µs&#10;jeopardy.json: 68,532 µs&#10;reads into structs and steps over fields it doesn&#x27;t know without checking them (validate_skipped checks them too)">
<rect class="nj-heat-0" x="455" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">0.58</text>
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">0.55</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;5.23× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 3,767 µs&#10;citm_catalog.json: 6,532 µs&#10;canada.json: 24,351 µs&#10;jeopardy.json: 940,280 µs">
<rect class="nj-heat-4" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">5.23</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit&#10;4.91× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 4,023 µs&#10;citm_catalog.json: 6,662 µs&#10;canada.json: 23,242 µs&#10;jeopardy.json: 724,016 µs">
<rect class="nj-heat-3" x="501" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">4.91</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;5.12× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 3,647 µs&#10;citm_catalog.json: 6,503 µs&#10;canada.json: 25,082 µs&#10;jeopardy.json: 546,003 µs">
<rect class="nj-heat-4" x="593" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">5.12</text>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify&#10;4.96× the time of the fastest library (fully validating)&#10;way: generic (strict)&#10;twitter.json: 3,520 µs&#10;citm_catalog.json: 6,525 µs&#10;canada.json: 24,118 µs&#10;jeopardy.json: 500,684 µs">
<rect class="nj-heat-3" x="593" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">4.96</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;0.70× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 428 µs&#10;citm_catalog.json: 1,144 µs&#10;canada.json: 2,468 µs&#10;jeopardy.json: 94,867 µs&#10;minify_json only removes whitespace, without parsing the values">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less&#10;0.70× the time of the fastest fully validating library&#10;way: minify_json&#10;twitter.json: 425 µs&#10;citm_catalog.json: 1,142 µs&#10;canada.json: 2,391 µs&#10;jeopardy.json: 97,583 µs&#10;minify_json only removes whitespace, without parsing the values">
<rect class="nj-heat-0" x="639" y="333" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="348" text-anchor="middle">0.70</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="361" text-anchor="middle">P</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;1.92× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 364 µs&#10;citm_catalog.json: 712 µs&#10;canada.json: 4,265 µs&#10;jeopardy.json: 143,981 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write&#10;1.74× the time of the fastest library (fully validating)&#10;way: generic&#10;twitter.json: 336 µs&#10;citm_catalog.json: 663 µs&#10;canada.json: 3,685 µs&#10;jeopardy.json: 127,928 µs">
<rect class="nj-heat-2" x="685" y="333" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.92</text>
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.74</text>
</g>
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="390" text-anchor="end">nlohmann/json json</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;2.00× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 789 µs&#10;citm_catalog.json: 1,631 µs&#10;canada.json: 4,570 µs&#10;jeopardy.json: 94,289 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate&#10;2.01× the time of the fastest library (fully validating)&#10;way: accept&#10;twitter.json: 783 µs&#10;citm_catalog.json: 1,619 µs&#10;canada.json: 4,621 µs&#10;jeopardy.json: 98,860 µs">
<rect class="nj-heat-2" x="225" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">2.00</text>
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">2.01</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.73× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 807 µs&#10;citm_catalog.json: 1,647 µs&#10;canada.json: 5,962 µs&#10;jeopardy.json: 100,804 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum&#10;1.75× the time of the fastest library (fully validating)&#10;way: sax&#10;twitter.json: 813 µs&#10;citm_catalog.json: 1,676 µs&#10;canada.json: 6,045 µs&#10;jeopardy.json: 104,843 µs">
<rect class="nj-heat-2" x="317" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="362" y="390" text-anchor="middle">1.73</text>
<text class="nj-charts-cell" x="362" y="390" text-anchor="middle">1.75</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;7.68× the time of the fastest library (fully validating)&#10;twitter.json: 3,523 µs · parse&#10;citm_catalog.json: 5,534 µs · structs (from_json)&#10;canada.json: 12,684 µs · parse&#10;jeopardy.json: 623,070 µs · structs (from_json)">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select&#10;7.62× the time of the fastest library (fully validating)&#10;twitter.json: 3,609 µs · structs (from_json)&#10;citm_catalog.json: 5,673 µs · structs (from_json)&#10;canada.json: 12,031 µs · structs (from_json)&#10;jeopardy.json: 607,902 µs · parse">
<rect class="nj-heat-4" x="409" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">7.68</text>
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">7.62</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;4.27× the time of the fastest library (fully validating)&#10;way: ordered_json&#10;twitter.json: 3,156 µs&#10;citm_catalog.json: 5,280 µs&#10;canada.json: 16,247 µs&#10;jeopardy.json: 922,463 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit&#10;4.15× the time of the fastest library (fully validating)&#10;twitter.json: 3,222 µs · ordered_json&#10;citm_catalog.json: 5,204 µs · ordered_json&#10;canada.json: 16,070 µs · parse&#10;jeopardy.json: 855,263 µs · ordered_json">
<rect class="nj-heat-3" x="501" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">4.27</text>
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">4.15</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;5.15× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 3,980 µs&#10;citm_catalog.json: 6,495 µs&#10;canada.json: 17,573 µs&#10;jeopardy.json: 730,814 µs">
<rect class="nj-heat-4" x="593" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">5.15</text>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify&#10;4.94× the time of the fastest library (fully validating)&#10;way: parse + dump&#10;twitter.json: 3,741 µs&#10;citm_catalog.json: 6,096 µs&#10;canada.json: 16,580 µs&#10;jeopardy.json: 721,380 µs">
<rect class="nj-heat-3" x="593" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">4.94</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;1.88× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 441 µs&#10;citm_catalog.json: 628 µs&#10;canada.json: 4,091 µs&#10;jeopardy.json: 129,455 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write&#10;1.86× the time of the fastest library (fully validating)&#10;way: dump&#10;twitter.json: 440 µs&#10;citm_catalog.json: 636 µs&#10;canada.json: 4,063 µs&#10;jeopardy.json: 119,266 µs">
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">1.88</text>
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">1.86</text>
</g>
<text class="nj-charts-rowlabel " x="216" y="426" text-anchor="end">RapidJSON</text>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;3.97× the time of the fastest library (fully validating)&#10;twitter.json: 1,638 µs · insitu (copy)&#10;citm_catalog.json: 2,230 µs · S&#8203;AX&#10;canada.json: 11,264 µs · S&#8203;AX&#10;jeopardy.json: 209,691 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate&#10;3.89× the time of the fastest library (fully validating)&#10;twitter.json: 1,651 µs · insitu (copy)&#10;citm_catalog.json: 2,232 µs · S&#8203;AX&#10;canada.json: 10,380 µs · S&#8203;AX (raw numbers)&#10;jeopardy.json: 210,972 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="225" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">3.97</text>
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">3.89</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.13× the time of the fastest fully validating library&#10;twitter.json: 1,135 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,666 µs · S&#8203;AX (no encoding check)&#10;canada.json: 11,264 µs · S&#8203;AX (validates fully)&#10;jeopardy.json: 157,274 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less&#10;3.04× the time of the fastest fully validating library&#10;twitter.json: 1,120 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,660 µs · S&#8203;AX (no encoding check)&#10;canada.json: 10,317 µs · S&#8203;AX (raw numbers) (no encoding check)&#10;jeopardy.json: 157,831 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="271" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.13</text>
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.04</text>
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;3.21× the time of the fastest library (fully validating)&#10;twitter.json: 1,679 µs · insitu (copy)&#10;citm_catalog.json: 2,388 µs · S&#8203;AX&#10;canada.json: 11,030 µs · S&#8203;AX&#10;jeopardy.json: 216,612 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum&#10;3.27× the time of the fastest library (fully validating)&#10;twitter.json: 1,679 µs · insitu (copy)&#10;citm_catalog.json: 2,311 µs · S&#8203;AX&#10;canada.json: 11,995 µs · insitu (copy)&#10;jeopardy.json: 226,217 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="317" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">3.21</text>
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">3.27</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.54× the time of the fastest fully validating library&#10;twitter.json: 1,185 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,768 µs · S&#8203;AX (no encoding check)&#10;canada.json: 11,030 µs · S&#8203;AX (validates fully)&#10;jeopardy.json: 161,397 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less&#10;2.57× the time of the fastest fully validating library&#10;twitter.json: 1,175 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,740 µs · S&#8203;AX (no encoding check)&#10;canada.json: 11,756 µs · Document (no encoding check)&#10;jeopardy.json: 167,558 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="363" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.54</text>
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.57</text>
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;3.98× the time of the fastest library (fully validating)&#10;twitter.json: 1,779 µs · insitu (copy)&#10;citm_catalog.json: 2,257 µs · insitu (copy)&#10;canada.json: 12,214 µs · Document&#10;jeopardy.json: 226,825 µs · insitu (copy)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select&#10;3.84× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 1,703 µs&#10;citm_catalog.json: 2,297 µs&#10;canada.json: 11,423 µs&#10;jeopardy.json: 217,155 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="409" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">3.98</text>
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">3.84</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.24× the time of the fastest fully validating library&#10;twitter.json: 1,194 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 1,923 µs · Document (no encoding check)&#10;canada.json: 12,165 µs · Document (no encoding check)&#10;jeopardy.json: 175,262 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less&#10;3.14× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 1,176 µs&#10;citm_catalog.json: 1,915 µs&#10;canada.json: 11,128 µs&#10;jeopardy.json: 171,258 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="455" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.24</text>
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.14</text>
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;3.02× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 2,511 µs&#10;citm_catalog.json: 3,310 µs&#10;canada.json: 20,627 µs&#10;jeopardy.json: 362,717 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit&#10;2.99× the time of the fastest library (fully validating)&#10;way: insitu (copy)&#10;twitter.json: 2,588 µs&#10;citm_catalog.json: 3,273 µs&#10;canada.json: 20,202 µs&#10;jeopardy.json: 363,265 µs&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="501" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">3.02</text>
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">2.99</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;2.63× the time of the fastest fully validating library&#10;twitter.json: 1,896 µs · insitu (copy) (no encoding check)&#10;citm_catalog.json: 2,942 µs · Document (no encoding check)&#10;canada.json: 20,627 µs · insitu (copy) (validates fully)&#10;jeopardy.json: 314,375 µs · insitu (copy) (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less&#10;2.65× the time of the fastest fully validating library&#10;way: insitu (copy) (no encoding check)&#10;twitter.json: 2,120 µs&#10;citm_catalog.json: 2,905 µs&#10;canada.json: 20,073 µs&#10;jeopardy.json: 307,430 µs&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)&#10;(copy): parses in place, on a copy of the input that is part of the time">
<rect class="nj-heat-3" x="547" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">2.63</text>
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">2.65</text>
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;3.65× the time of the fastest library (fully validating)&#10;twitter.json: 2,963 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 3,189 µs · S&#8203;AX to Writer&#10;canada.json: 21,761 µs · Document + Writer&#10;jeopardy.json: 406,899 µs · S&#8203;AX to Writer">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify&#10;3.57× the time of the fastest library (fully validating)&#10;twitter.json: 2,733 µs · S&#8203;AX to Writer&#10;citm_catalog.json: 3,088 µs · S&#8203;AX to Writer&#10;canada.json: 21,466 µs · Document + Writer&#10;jeopardy.json: 410,160 µs · S&#8203;AX to Writer">
<rect class="nj-heat-3" x="593" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">3.65</text>
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">3.57</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;2.79× the time of the fastest fully validating library&#10;twitter.json: 1,872 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 2,490 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 21,761 µs · Document + Writer (validates fully)&#10;jeopardy.json: 282,973 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less&#10;2.81× the time of the fastest fully validating library&#10;twitter.json: 1,855 µs · S&#8203;AX to Writer (no encoding check)&#10;citm_catalog.json: 2,516 µs · S&#8203;AX to Writer (no encoding check)&#10;canada.json: 20,678 µs · Document + Writer (no encoding check)&#10;jeopardy.json: 295,852 µs · S&#8203;AX to Writer (no encoding check)&#10;trusts U&#8203;TF-8: RapidJSON&#x27;s default (kParseValidateEncodingFlag checks it)">
<rect class="nj-heat-3" x="639" y="405" width="44" height="34" rx="3"/>
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">2.79</text>
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">2.81</text>
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="433" text-anchor="middle">U</text>
</g>
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;3.05× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 746 µs&#10;citm_catalog.json: 1,032 µs&#10;canada.json: 8,773 µs&#10;jeopardy.json: 150,334 µs">
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write&#10;2.97× the time of the fastest library (fully validating)&#10;way: Writer&#10;twitter.json: 688 µs&#10;citm_catalog.json: 1,020 µs&#10;canada.json: 9,144 µs&#10;jeopardy.json: 138,466 µs">
<rect class="nj-heat-3" x="685" y="405" width="90" height="34" rx="3"/>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">3.05</text>
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">2.97</text>
</g>
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+12 -7
View File
@@ -439,17 +439,21 @@ 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
def normalize_usecases(data):
"""Chooses each library's best variants again with the rules of the post: variants that copy each number's text
instead of formatting it (json_document's number_format::source, RapidJSON's raw numbers) and variants that reuse
a parser or document across calls are measured but not chosen"""
"""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, and neither are 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). Skipping the number conversion while reading is allowed"""
data = json.loads(json.dumps(data))
rank = {"full": 0, "n/a": 0, "no UTF-8": 1, "partial": 2}
for files in data.values():
for uc, files in data.items():
banned = ("reused",) + (("source numbers", "raw numbers") if uc in WRITING else ())
for cell in files.values():
for e in cell.values():
vs = [(v["us"], k, v["level"]) for k, v in e["variants"].items()
if not any(w in k for w in ("source numbers", "raw numbers", "reused"))]
vs = [(v["us"], k, v["level"]) for k, v in e["variants"].items() if not any(w in k for w in banned)]
full = [v for v in vs if rank[v[2]] == 0]
pick = lambda v: {"us": v[0], "variant": v[1], "level": "full" if rank[v[2]] == 0 else v[2]}
e["best"] = pick(min(full)) if full else None
@@ -465,6 +469,7 @@ CHECKS_LESS = [
("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)"),
@@ -561,7 +566,7 @@ 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"] if v["full"] else v["alt"] * 1.5 for v in t[l].values()])
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 = [], []