lite-json

Simple JSON parser written with Rust. Wasm / no_std ready.
How to Add in Cargo.toml
std
[dependencies]
lite-json = "0.2.0"
no_std
[dependencies]
lite-json = { version = "0.2.0", default-features = false, defaults = ["no_std"] }
Example Usage
Creating JSON
This example will create a lite-json structure, then print it as a JSON string.
use lite_json::Serialize;
use lite_json::json::{JsonValue, NumberValue};
fn main()
{
let mut object_elements = vec!();
let boolean_value = true;
let object_key = "boolean".chars().collect();
object_elements.push((object_key, JsonValue::Boolean(boolean_value)));
let array_value = vec!(JsonValue::Boolean(true), JsonValue::Boolean(false), JsonValue::Boolean(true));
let object_key = "array".chars().collect();
object_elements.push((object_key, JsonValue::Array(array_value)));
let string_value = "Hello World!".chars().collect();
let object_key = "string".chars().collect();
object_elements.push((object_key, JsonValue::String(string_value)));
let number_value = NumberValue
{
integer: 1234,
fraction: 0,
fraction_length: 0,
exponent: 0,
};
let object_key = "number".chars().collect();
object_elements.push((object_key, JsonValue::Number(number_value)));
let object_key = "null".chars().collect();
object_elements.push((object_key, JsonValue::Null));
let object_value = JsonValue::Object(object_elements);
let json = object_value.format(4);
let json_output = std::str::from_utf8(&json).unwrap();
println!("{}", json_output);
}
This will output:
{
"boolean": true,
"array": [
true,
false,
true
],
"string": "Hello World!",
"number": 1234,
"null": null
}
Parsing JSON
This example will parse a JSON string into a lite-json structure.
use lite_json::json_parser::parse_json;
fn main()
{
let json_string =
r#"
{
"boolean": true,
"array":
[
true,
false,
true
],
"string": "Hello World!",
"number": 1234,
"null": null
}
"#;
let json_data = parse_json(json_string).expect("Invalid JSON specified!");
println!("{:?}", json_data);
}
Parsing JSON with Options
The parser options allows you to set the max depth of parsing nested objects. This code will result in an error because the max nest level is set to 1, but the depth of our JSON is 2 due to the presence of a nested array.
Note: This example requires the lite-parser crate to be added to Cargo.toml.
use lite_json::json_parser::parse_json_with_options;
use lite_parser::parser::ParserOptions;
fn main()
{
let json_string =
r#"
{
"boolean": true,
"array":
[
true,
false,
true
],
"string": "Hello World!",
"number": 1234,
"null": null
}
"#;
let parser_options = ParserOptions
{
max_nest_level: Some(1)
};
let json_data = parse_json_with_options(json_string, parser_options).expect("Invalid JSON specified!");
println!("{:?}", json_data);
}