10 releases (5 stable)

1.1.2 Feb 1, 2020
1.1.0 Feb 8, 2019
1.0.1 Jan 2, 2017
0.3.0 May 9, 2015
0.0.1 May 6, 2015

#2304 in Parser implementations

Download history 14/week @ 2023-12-11 19/week @ 2023-12-18 10/week @ 2023-12-25 23/week @ 2024-01-08 12/week @ 2024-01-15 54/week @ 2024-01-22 33/week @ 2024-01-29 56/week @ 2024-02-05 22/week @ 2024-02-12 24/week @ 2024-02-19 40/week @ 2024-02-26 34/week @ 2024-03-04 33/week @ 2024-03-11 45/week @ 2024-03-18 48/week @ 2024-03-25

164 downloads per month
Used in 5 crates (3 directly)

MIT/Apache

28KB
540 lines

Build Status

This library contains a collection of tools to help interacting with json encoded data.

Features

  • Simple Json Lexer
    • Without any intention of being feature complete, it is able to split ascii json data streams into their lexical tokens, keeping track of the character spans that make them up.
    • facilitates writing higher-level parsers and filters
  • Key-Value Filter
    • A utility to filter lexical tokens which belong to keys that have values of a given type. This makes it easy to re-assemble json data streams and strip them off their null values, for example.
  • TokenReader
    • An adapter to convert a stream of Tokens into a stream of bytes, supprting the Read trait.
    • Use it to convert filtered and/or manipulated token-streams back into byte-streams.
    • Configure the output style, to achieve effects like pretty-printing or strip the output of all whitespace.

Usage

Add this to your Cargo.toml

[dependencies]
json-tools = "*"

Add this to your lib ...

use json_tools::BufferType;
use json_tools::Lexer;

for token in Lexer::new(r#"{ "face": "😂" }"#.bytes(), BufferType::Span) {
	println!("{:?}", token);
}

Motivation

This library may possibly never grow bigger than the two features originally mentioned, as it was created as a workaround to missing features in serde.

Manual

Run tests with cargo test and benchmarks with cargo bench (works on stable).

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps