json-stream-parser 0.1.4

A JSON parser that is capable of parsing incomplete JSON strings that are streamed in.
Documentation
![crates.io](https://img.shields.io/crates/v/json-stream-parser.svg)

# JSON Stream Parser in Rust

This project is a library that provides an incremental JSON parser, built with Rust. It's designed to parse a stream of JSON data, making it suited for situations where you might not have the entire JSON object available when parsing begins — for example, in the case of streaming a structured response from a Large Language Model.

🚨 This project is a work in progress, and is not yet ready for use in production.

## Installation

This project is built with [Rust](https://www.rust-lang.org/), and you'll need `cargo` to get started.

## Usage

The simplest way to use this library is to use the `parse_stream` function, which takes a string slice and returns a `Result` containing a `serde_json::Value` if successful.
Here's an example:

```rust
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);
    }
}
```

As you can see this object is incomplete, but the parser will still be able to parse it:

```rust
Object {"key": String("value")}
```

Alternatively, you can use the `JsonStreamParser` struct to parse a stream of JSON data incrementally. Here's an example:

```rust
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());
}
```

As the characters are streamed in, the parser will update the result as follows:

```rust
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")}
```

## Testing

This project uses `cargo test` to run the tests.

## Contributing

Communicate intentions through the Issues for any major changes. Feel free contribute other changes directly via a pull request.

## License

This project is licensed under the MIT License.