#[macro_use] extern crate serde_json; #[macro_use] extern crate serde_derive; #[derive(Serialize,Deserialize,Debug,Clone)] struct Node { #[serde(skip_serializing_if = "Option::is_none")] name: Option, #[serde(skip_serializing_if = "Option::is_none")] description: Option, #[serde(skip_serializing_if = "Vec::is_empty")] children: Vec, } fn main() { let source = include_str!("categories.json"); let parsed : Node = serde_json::from_str(source).expect("parse"); println!("{}", serde_json::to_string_pretty(&parsed).expect("serialize")); }