jsnpar

Crates.iojsnpar
lib.rsjsnpar
version0.1.1
created_at2025-12-18 05:02:55.247702+00
updated_at2025-12-19 23:38:49.241509+00
descriptionRust JSON parser implementation using parser combinators.
homepage
repositoryhttps://github.com/yarso-su/jsnpar
max_upload_size
id1991739
size21,255
yarso (yarso-su)

documentation

README

jsnpar - JSON Parser 🦀

Crates.io License

Rust JSON parser implementation using parser combinators.

[!NOTE] Educational Project: This is a learning project and not recommended for production use. For production, use serde_json.

Motivation

As I'm learning Rust, I decided to write a minimal JSON parser using parser combinators. This is not intended to be used in production, but rather as a learning exercise. Although I plan to iterate until I achieve a more robust implementation, I'm open to suggestions and contributions.

I created this crate thanks to Bodil's article on parser combinators. I highly recommend checking it out.

Installation

Cargo

cargo add jsnpar

Usage

let json = r#"{"name": "yarso", "awesome": true}"#;
let result = jsnpar::parse(json);

if let Ok(jsnpar::JsonValue::Object(map)) = result {
    println!("{:?}", map);
}

Known Limitations

This is a custom implementation tailored to my own needs, so there is plenty of room for improvement.

Feel free to fork the project, open issues, or contribute suggestions.

Missing Features

  • General optimizations
  • Memory optimizations
  • Custom errors types (currently returns a String)
  • Streaming parser for large files
  • Custom number types (only f64)
  • Partial parsing
  • More comprehensive test suite
  • Performance benchmarks
  • Examples and tutorials

Alternatives

For production use, consider these battle-tested alternatives:

Contributing

This is primarily a learning project, but contributions are welcome! Feel free to:

  • Open issues for bugs or feature requests
  • Submit pull requests
  • Share feedback on the code

Acknowledgments

Built with:

  • Rust - Because learning is fun

License

MIT License

Commit count: 0

cargo fmt