#json #byte-stream #low-memory #checker #automata #validate #json-checker

bin+lib 氧化JSON检查器

下推自动机低内存JSON字节流检查器

5个不稳定版本

0.3.2 2020年5月19日
0.3.1 2020年5月17日
0.3.0 2020年5月17日
0.2.0 2020年5月16日
0.1.0 2020年5月16日

#2008解析实现

Download history 21/week @ 2024-03-31 3/week @ 2024-04-07

每月62次下载

自定义许可

33KB
679

氧化JSON检查器

这是JSON_checker库的纯Rust版本。

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

您可以使用它与Rust的std::io::Read特质一起使用,以验证JSON是否有效,而无需将其保留在内存中。


lib.rs:

氧化JSON检查器是一个库,它提供了不保留字节流在内存中的JSON验证,它流式传输字节并在运行时使用下推自动机对其进行验证。

原始库已从json.org获取,并改进为接受每个有效的JSON元素都有有效的JSON文档。

因此,此库接受单个字符串或单个整数作为有效的JSON文档,这样我们就遵循了serde_json规则。

示例:验证一些字节

此示例演示了您可以如何向库提供一个简单的字节切片并验证它是否是有效的JSON文档。

let text = r#"["I", "am", "a", "valid", "JSON", "array"]"#;
let bytes = text.as_bytes();

oxidized_json_checker::validate(bytes)?;

示例:验证字节流

此示例演示了您可以使用实现了io::Read的任何类型将字节流传递给JsonChecker并验证它是否是有效的JSON。

let stream = streaming_from_the_web()?;

oxidized_json_checker::validate(stream)?;

示例:复杂组合

此示例演示了您如何使用JsonChecker类型来检查压缩的字节流。

您可以将流解压缩,使用JsonChecker进行检查,然后再将其压缩以将其传输到其他地方。所有这些操作都不会对内存造成太大影响。

use std::io;
use oxidized_json_checker::JsonChecker;

let stdin = io::stdin();
let stdout = io::stdout();

// Wrap the stdin reader in a Snappy reader
// then wrap it in a JsonChecker reader.
let rdr = snap::read::FrameDecoder::new(stdin.lock());
let mut rdr = JsonChecker::new(rdr);

// Wrap the stdout writer in a Snappy writer.
let mut wtr = snap::write::FrameEncoder::new(stdout.lock());

// The copy function will return any io error thrown by any of the reader,
// the JsonChecker throw errors when invalid JSON is encountered.
io::copy(&mut rdr, &mut wtr)?;

// We must check that the final bytes were valid.
rdr.finish()?;

没有运行时依赖