Does the output use serde?
Yes. Every generated struct carries #[derive(Debug, Serialize, Deserialize)] from the serde crate, so serde_json::from_str() and serde_json::to_string() work out of the box. Add serde = { version = "1", features = ["derive"] } and serde_json = "1" to your Cargo.toml. The Debug derive lets you println!("{:?}", root) for quick inspection without writing your own Display impl.
How are Option<T> types inferred?
JSON null in the sample becomes Option<serde_json::Value> by default — that is the safest fallback because serde_json::Value can carry any nested JSON shape. To pin it to a concrete type, change Option<serde_json::Value> to Option<String> or Option<i64> after copying. For fields that may be absent in the wire format (not just null) add #[serde(default)] so missing keys deserialize as Option::None.
How are Rust snake_case conventions applied?
JSON keys in camelCase or PascalCase (e.g. zipCode, UserId) are converted to snake_case Rust field names (zip_code, user_id) and tagged with #[serde(rename = "zipCode")] so serde reads and writes the original wire format. snake_case keys in the JSON pass through unchanged with no rename attribute needed.
How do I deserialize the generated structs?
let root: Root = serde_json::from_str(&json_string)?; — that is everything serde_json needs once the struct derives Deserialize. To stream from a Read use serde_json::from_reader. To convert from a serde_json::Value already in memory use serde_json::from_value(value)?.
How are JSON arrays mapped to Rust?
Arrays of objects become Vec<StructName>. Arrays of strings become Vec<String>; arrays of integers become Vec<i64>; arrays of floats become Vec<f64>. Mixed-type arrays fall back to Vec<serde_json::Value>. serde_json handles Vec<T> directly — no extra wrapper required.
Why is the tool emitting i64 instead of u64?
JSON numbers are emitted as i64 because that covers the full safe-integer range in serde_json without sign concerns. For unsigned IDs change to u64 manually. Note that JavaScript JSON parsers cap precision at 2^53 — for larger IDs (Twitter snowflake, blockchain hashes) use String and parse to u64 inside your code.
How are nested JSON objects modelled?
Each nested object becomes its own #[derive(Serialize, Deserialize)] struct so you can split the file or pull each into its own module. The parent struct holds the nested type by value (pub address: Address) — change to Option<Address> for fields that may be absent or null in the JSON.
Is the JSON uploaded to your servers?
No. Conversion runs entirely in your browser via JavaScript. Open DevTools → Network and click Convert — no requests are made. JSON containing API keys, internal field names, or PII never leaves your machine.