chisel-json 1.0.5

Simple JSON parser for Rust
Documentation
[![Rust](https://github.com/jonnycoombes/chisel-json/actions/workflows/rust.yml/badge.svg)](https://github.com/jonnycoombes/chisel-json/actions/workflows/rust.yml)

[![crates.io](https://img.shields.io/crates/v/chisel-json.svg)](https://crates.io/crates/chisel-json)

[![crates.io](https://img.shields.io/crates/l/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:

| Feature | Description | Default Feature? |
|---------|-------------|---------|
| `mixed_numerics` | Should numbers be parsed separately as `i64` and `f64`? | `yerp` |

### Examples

There are several examples provided as part of the source:

| Example | Description |
|---------|-------------|
|[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.