#json-parser #json-stream #json #streaming-json #parser #stream #streaming

json-stream-parser

一个能够解析流式传输的不完整 JSON 字符串的 JSON 解析器

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解析器实现

MIT 许可证

22KB
444

crates.io

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