[](https://github.com/jonnycoombes/chisel-json/actions/workflows/rust.yml)
[](https://crates.io/crates/chisel-json)
[](https://crates.io/crates/chisel-json)
# chisel-json
### Another JSON Parser?
The Chisel JSON parser aims to be a relatively simple DOM and SAX parser for JSON, that does
*not include* all the machinery required to support explicit serialisation from, and
deserialisation into `structs`/`enums` within Rust.
It's a simple little parser that is intended to allow you to choose how you want to parse a lump of *cursed* JSON,
and then either build/transform a DOM into a richer AST structure, or alternatively just cherry-pick the useful
bits of the payload via closures which are called in response to SAX parsing events.
(*Because let's face it, JSON payloads usually come burdened with a whole load of unnecessary crap that
you'll never use*).
### Crate Feature Flags
There currently defined features within the crate are as follows:
| `mixed_numerics` | Should numbers be parsed separately as `i64` and `f64`? | `yerp` |
### Examples
There are several examples provided as part of the source:
|[distinct_pointers](./examples/distinct_pointers.rs) | Extract all distinct JSON pointers using the SAX parser |
|[distinct_object_pointers](./examples/distinct_object_pointers.rs) | Extract all object JSON pointers using the SAX parser |
### Build & Test
In order to build locally you can just use the standard `cargo build` command and associated variants,
however there is also a supplementary [Makefile.toml](./Makefile.toml) included in the source if you prefer to use
`cargo-make`.
To regenerate the README.md file as you build - you should either use:
```
cargo make
```
or alternatively,
```
cargo readme > README.md
```
There are a number of benchmarks included based on the *most excellent*
[criterion](https://github.com/bheisler/criterion.rs) within the source, which can be run using either the supplied
[benchmark.sh](./benchmark.sh) script, or alternatively by using the associated `cargo make` targets.