Crate messy_json[−][src]
Introduction
The rust ecosystem allows for very good compile-time implementation of JSON deserializer to rust structure, however, things get a bit more sparse when it come to run-time deserialization of dynamically structured objects.
This crate approaches this problems in a simple manner, resembling serde_json
’s Value
.
Usage
When deserializing from a known structure type, one would just call the serde
’s deserializer and let it do its magic.
However in this case, one needs to define how the JSON will be structured.
Defining the schema
To do that, one can use the provided object : MessyJson
For instance defining an object that could look like the following in JSON :
{
"hello": {
"world": 128
},
"an_optional_one": "Waou"
}
One would define the following MessyJson :
let schema = MessyJson::from(MessyJsonInner::Obj(MessyJsonObject::from(MessyJsonObjectInner::new( vec![( arcstr::literal!("hello"), MessyJson::from(MessyJsonInner::Obj(MessyJsonObject::from(MessyJsonObjectInner::new( vec![( arcstr::literal!("world"), MessyJson::from(MessyJsonInner::String(MessyJsonScalar::new(false))), )] .into_iter() .collect(), false, )))), ), ( arcstr::literal!("an_optional_one"), MessyJson::from(MessyJsonInner::String(MessyJsonScalar::new(true))) )] .into_iter() .collect(), false, ))));
Granted, this is a bit wordy to define such a simple structure but keep in mind that this should’nt be hand-written and should be composed by your application logic.
Parsing the schema
To parse the &str
using the schema one only need to crweate the deserializer
and call it using the schema builder :
const DUMMY_OBJ: &str = r#" { "hello": { "world": 128 }, "an_optional_one": "Waou" } "#; let mut deserializer = serde_json::Deserializer::from_str(DUMMY_OBJ); let val: MessyJsonValueContainer = schema.builder(MessyJsonSettings::default()).deserialize(&mut deserializer).unwrap(); println!("{:#?}", val.inner());
Structs
MessyJson | Wrapper for MessyJsonInner |
MessyJsonArray | JSON Array schema value |
MessyJsonArrayValue | Deserialized JSON Array Value |
MessyJsonBuilder | Schema deserializer of a JSON Value |
MessyJsonNumeric | JSON Number schema value |
MessyJsonObject | Wrapper for MessyJsonObjectInner |
MessyJsonObjectBuilder | Builder for MessyJsonObject |
MessyJsonObjectInner | JSON Object schema value |
MessyJsonObjectValue | Deserialized JSON Object Value |
MessyJsonScalar | JSON Scalar schema value |
MessyJsonSettings | Setting object for deserializing |
MessyJsonValueContainer | Container for MessyJsonValue |
Enums
MessyJsonExpected | An expected object, set when encountering a null value. |
MessyJsonInner | Schema of a JSON Value |
MessyJsonNullType | Deserialized JSON Null Value |
MessyJsonNumberType | JSON Number type schema |
MessyJsonValue | Deserialized JSON Value |
Type Definitions
KeyType |