JSON Parsing
This example demonstrates how to use the built-in, native, zero-dependency recursive-descent JSON tokenization parser and serializer engine.
Compilable Example
//! json_parsing example — native JSON parse and stringify. use adapters::Value; use adapters::json::{parse, stringify, stringify_pretty}; use std::collections::BTreeMap; fn main() -> Result<(), Box<dyn std::error::Error>> { println!("=== json_parsing example ===\n"); // All value types let samples = [ "null", "true", "false", "42", "-7", "3.14", r#""hello world""#, "[]", "{}", r#"[1, "two", null, false, 3.14]"#, r#"{"name":"alice","age":30,"active":true}"#, ]; for s in &samples { let v = parse(s)?; let out = stringify(&v)?; println!("Input: {s}"); println!("Parsed: {:?}", v); println!("Output: {out}\n"); } // Unicode strings let unicode = r#""\u0048\u0065\u006C\u006C\u006F \u4e16\u754c""#; let v = parse(unicode)?; println!("Unicode: {} → {:?}\n", unicode, v); // Empty containers let empty_obj = parse("{}")?; let empty_arr = parse("[]")?; println!("Empty object: {:?}", empty_obj); println!("Empty array: {:?}\n", empty_arr); // Pretty print let mut m = BTreeMap::new(); m.insert("name".to_string(), Value::String("Bob".into())); m.insert( "scores".to_string(), Value::Array(vec![Value::Int(10), Value::Int(20)]), ); let obj = Value::Object(m); println!("Pretty printed:\n{}", stringify_pretty(&obj)?); // Error case match parse("{invalid}") { Ok(_) => println!("Unexpected success"), Err(e) => println!("Parse error (expected): {}", e), } Ok(()) }