#streaming-json #json #low-memory #streaming #byte-stream #automata #index

bin+lib turbo-json-checker

一个低内存堆栈自动机 JSON 字节流检查器,返回 JSON 根类型及其在 Reader 中的起始和结束索引

3 个稳定版本

2.0.1 2021 年 8 月 20 日
2.0.0 2021 年 8 月 18 日
1.0.1 2021 年 8 月 18 日
1.0.0 2021 年 8 月 17 日

#1349解析器实现

每月 24 次下载

自定义许可证

41KB
848

turbo-json-checker

这是 oxidized-json-checker 的分支,它会返回 Reader 中的 JSON 类型及其起始和结束索引。

这是 JSON_checker 库 的纯 Rust 版本。

这是一个快速确定 JSON 文本是否语法正确的堆栈自动机。它可以用于过滤系统的输入,或验证系统的输出是否语法正确。

您可以使用它与 Rust trait 一起使用 std::io::Read 检查 JSON 是否有效,而无需将其保存在内存中。

性能

我针对 jq 运行了一些测试,以确保库在边界内。我使用了一个大型的 JSON 行文件(8.3GB),并将其使用 jq -cs '.' 转换为 JSON 😜

您可以在 Paul Masurel 的 Tantivy 的基准存储库 上找到这些维基百科文章。

jq类型

jq 在检查和确定 JSON 文档类型时需要多少次?可能太多了,而且还需要一点内存:12GB!

$ time cat ../wiki-articles.json | jq type
"array"

real    1m55.064s
user    1m37.335s
sys     0m21.935s

ojc

ojc 需要多少次?少一点!它也消耗 0kb 的内存。

$ time cat ../wiki-articles.json | ojc
Array

real  0m56.780s
user  0m47.487s
sys   0m12.628s

ojc 与 SIMD

已经执行了几次ojc?56秒,这不可能吧,我们还在2020年...为什么不启用一些SIMD优化呢?使用nightly功能编译二进制文件,就这样开始了!

$ cargo build --release --features nightly
$ time cat ../wiki-articles.json | ojc
Array

real    0m15.818s
user    0m10.892s
sys     0m10.721s

依赖关系

~230KB