20 breaking releases

Uses new Rust 2021

0.21.0 Aug 5, 2022
0.20.0 Jul 27, 2022
0.19.0 Jan 29, 2022
0.17.1 Dec 11, 2021
0.12.2 Jun 7, 2020

#128 in Parser implementations

Download history 1565/week @ 2022-08-10 1775/week @ 2022-08-17 2025/week @ 2022-08-24 1627/week @ 2022-08-31 2168/week @ 2022-09-07 1798/week @ 2022-09-14 1922/week @ 2022-09-21 1837/week @ 2022-09-28 2061/week @ 2022-10-05 1716/week @ 2022-10-12 1682/week @ 2022-10-19 10381/week @ 2022-10-26 23123/week @ 2022-11-02 26771/week @ 2022-11-09 32571/week @ 2022-11-16 9318/week @ 2022-11-23

93,673 downloads per month
Used in 24 crates (14 directly)

MIT license

68KB
2K SLoC

jsonc-parser

JSONC parser implemented in Rust.

Example

To a simple JsonValue:

use jsonc_parser::parse_to_value;

let json_value = parse_to_value(r#"{ "test": 5 } // test"#, &Default::default())?;
// check the json_value here

Or an AST:

use jsonc_parser::parse_to_ast;
use jsonc_parser::CollectOptions;

let parse_result = parse_to_ast(r#"{ "test": 5 } // test"#, &CollectOptions {
    comments: true, // include comments in result
    tokens: true, // include tokens in result
}, &Default::default())?;
// ...inspect parse_result for value, tokens, and comments here...

Serde

If you enable the "serde" feature as follows:

# in Cargo.toml
jsonc-parser = { version = "...", features = ["serde"] }

Then you can use the parse_to_serde_value function to get a serde_json::Value:

use jsonc_parser::parse_to_serde_value;

let json_value = parse_to_serde_value(r#"{ "test": 5 } // test"#, &Default::default())?;

Alternatively, use parse_to_ast then call .into() (ex. let value: serde_json::Value = ast.into();).

Parse Strictly as JSON

Provide ParseOptions and set all the options to false:

use jsonc_parser::parse_to_value;
use jsonc_parser::ParseOptions;

let json_value = parse_to_value(text, &ParseOptions {
  allow_comments: false,
  allow_loose_object_property_names: false,
  allow_trailing_commas: false,
})?;

Dependencies

~135KB