5 个版本
0.1.4 | 2024 年 4 月 11 日 |
---|---|
0.1.3 | 2024 年 4 月 6 日 |
0.1.2 | 2024 年 4 月 5 日 |
0.1.1 | 2024 年 4 月 5 日 |
0.1.0 | 2024 年 4 月 5 日 |
#2133 在 解析器实现
22KB
444 行
Rust 中的 JSON Stream Parser
这是一个库,使用 Rust 构建,提供增量 JSON 解析器。它旨在解析流式传输的 JSON 数据,适用于在解析开始时可能没有整个 JSON 对象可用的情况,例如在流式传输来自大型语言模型的有序响应时。
🚨 此项目正在进行中,尚未准备好用于生产。
安装
该项目使用 Rust 构建,您需要 cargo
来开始。
用法
使用此库的最简单方法是使用 parse_stream
函数,该函数接受一个字符串切片并返回一个包含 Result
的结果,如果成功,包含一个 serde_json::Value
。以下是一个示例
fn main() {
let incomplete_json = r#"{"key": "value""#;
let parsed_json = json_stream_parser::parse_stream(incomplete_json);
if let Ok(json) = parsed_json {
println!("{:?}", json);
}
}
如您所见,此对象是不完整的,但解析器仍然能够解析它
Object {"key": String("value")}
或者,您可以使用 JsonStreamParser
结构来增量解析 JSON 数据流。以下是一个示例
fn main() {
let incomplete_json = r#"{"key": "value""#;
let mut parser = JsonStreamParser::new();
for c in incomplete_json.chars() {
parser.add_char(c);
println!("{:?}", parser.get_result());
}
println!("{:?}", parser.get_result());
}
随着字符的流式传输,解析器将按以下方式更新结果
Object {} // stays empty until the closing quote for key is found
Object {"key": Null}
Object {"key": String("")}
Object {"key": String("v")}
Object {"key": String("va")}
Object {"key": String("val")}
Object {"key": String("valu")}
Object {"key": String("value")}
测试
该项目使用 cargo test
来运行测试。
贡献
通过 Issues 进行重大更改的沟通。请随时通过拉取请求直接贡献其他更改。
许可证
该项目受 MIT 许可证许可。
依赖关系
~0.5–1MB
~20K SLoC