3 个稳定版本
2.0.1 | 2021 年 8 月 20 日 |
---|---|
2.0.0 | 2021 年 8 月 18 日 |
1.0.1 | 2021 年 8 月 18 日 |
1.0.0 |
|
#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