jsonc-parser
JSONC parsing and manipulation for Rust.
Parsing
To a simple JsonValue:
use parse_to_value;
let json_value = parse_to_value?;
// check the json_value here
Or an AST:
use parse_to_ast;
use CollectOptions;
let parse_result = parse_to_ast?;
// ...inspect parse_result for value, tokens, and comments here...
Manipulation (CST)
When enabling the cst cargo feature, parsing to a CST provides a first class manipulation API:
use CstRootNode;
use ParseOptions;
use json;
let json_text = r#"{
// comment
"data": 123
}"#;
let root = parse.unwrap;
let root_obj = root.object_value_or_set;
root_obj.get.unwrap.set_value;
root_obj.append;
assert_eq!;
Serde
If you enable the "serde" feature as follows:
# in Cargo.toml
= { = "...", = ["serde"] }
Then you can use the parse_to_serde_value function to get a serde_json::Value:
use parse_to_serde_value;
let json_value = parse_to_serde_value?;
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 parse_to_value;
use ParseOptions;
let json_value = parse_to_value?;
Error column number with unicode-width
To to get more accurate display column numbers in error messages, enable the error_unicode_width cargo feature, which will pull in and use the unicode-width dependency internally. Otherwise it will use the character count, which isn't as accurate of a number, but will probably be good enough in most cases.