Rust naar JSON-converter
Plak Rust-structs met Serialize-derive. Krijg schone JSON terug.
Wat deze tool doet
Als je ooit een struct hebt gedefinieerd, er #[derive(Serialize)] op hebt gekwakt en beseft dat je eigenlijk alleen de JSON wilt — zonder het serde-boilerplate te schrijven, serde_json aan je Cargo.toml toe te voegen en cargo run te draaien — dan doet deze tool precies dat. Plak je Rust hier en krijg geldige JSON terug zonder cargo aan te raken. Hij kan overweg met een enkel struct-literal, een heel module met meerdere types, of iets met diep geneste Vec en Option — zelfde resultaat: een schoon JSON-document waarin elk veld bewaard blijft.
De converter volgt hoe serde waarden daadwerkelijk serialiseert. String en &str worden JSON-strings. i32, u64, f32, f64 worden JSON-getallen. bool wordt true/false. Vec<T>, &[T] en [T; N] worden JSON-arrays. HashMap<String, V> / BTreeMap<String, V> worden JSON-objects. Option<T> met None wordt JSON-null; met Some(value) wordt het binnenste type geserialiseerd. Tuples komen eruit als heterogene arrays — precies zoals gedocumenteerd op serde.rs/data-model.
Serde-attributen worden gerespecteerd. #[serde(rename = "x")] hernoemt de JSON-key, #[serde(skip)] haalt het veld weg en #[serde(flatten)] tilt de velden van een geneste struct naar het parent-object. enum-types volgen standaard de externally-tagged representatie (configureerbaar met #[serde(tag = "type")]). Plak meerdere structs tegelijk en elk komt er als top-level entry uit. Als je webservices bouwt op de Rust-standaardbibliotheek plus axum/actix, valt deze output direct in je integratietests.
Hoe je hem gebruikt
Drie stappen. Werkt hetzelfde of je nu één struct-literal of een hele module met een dozijn types plakt.
Plak je Rust (of laad het voorbeeld)
Kieper je Rust gewoon in de linker editor. Een struct, een tuple struct, een enum met varianten, meerdere types of geneste Vec/Option/HashMap — allemaal prima. Klik op Voorbeeld laden om eerst een realistisch voorbeeld te zien.
Je hoeft use-statements, lifetimes of derive-attributen niet te verwijderen. Laat de Rust-syntax staan zoals die is — de serde-attributen zijn onderdeel van wat de parser leest.
Klik op Converteren
Klik op de groene Converteren-knop. De tool leest de Rust, behoudt elke struct en elk veld en stuurt de JSON in één keer uit. Tijdens het verwerken draait een kort laadindicatortje.
Kopieer de JSON
Het rechterpaneel vult zich met ingesprongen JSON. Kopieer hem naar een reqwest-test, een axum-integratietest, je OpenAPI-voorbeelden of een curl-commando. Geen rebuild nodig.
Wanneer dit echt handig is
Fixtures voor webservices
Je hebt een axum- of actix-request-struct en je hebt JSON nodig voor een test of curl-call. Plak de struct, pak de JSON, klaar — geen cargo-cyclus.
Config-templates voor CLIs
Een clap-gedreven CLI met een Config-struct. Converteer hem naar een JSON-template dat gebruikers kunnen aanpassen, zonder alleen voor de docs een eigen <code>Default</code>-impl te schrijven.
Seeds voor integratietests
Maak van de struct-literals uit je unit-tests JSON-seed-bestanden voor integratietests, mockservers of fixtures voor embedded databases.
Docs die met de code meelopen
Genereer JSON-voorbeelden voor je README of OpenAPI-spec direct uit de echte Rust-types, zodat de docs niet meer gaan afdrijven.
Veelgestelde vragen
Heb ik serde en serde_json nodig in mijn Cargo.toml?
Voor deze tool niet — hij draait server-side en compileert jouw code niet. Voor runtime-gebruik in je eigen app is serde met de derive-feature plus serde_json de standaardcombinatie.
Respecteert hij #[serde(rename)], #[serde(skip)] en #[serde(flatten)]?
Ja. #[serde(rename = "x")] hernoemt de JSON-key, #[serde(skip)] haalt het veld uit de output en #[serde(flatten)] tilt geneste struct-velden naar de parent — precies zoals de documentatie van serde-field-attributes beschrijft.
Hoe worden Option, Vec en HashMap behandeld?
Option<T> met None wordt JSON-null; met Some(v) wordt de binnenste waarde geserialiseerd. Vec<T>, slices en arrays worden JSON-arrays. HashMap<String, V> en BTreeMap<String, V> worden JSON-objects; bij maps met niet-string keys worden die keys naar strings omgezet.
En enums met varianten?
Standaard gebruiken enum-varianten de externally-tagged representatie ({ "VariantName": {...} }). De attributen #[serde(tag = "type")], #[serde(untagged)] en #[serde(content = "data")] schakelen over naar internally-tagged, untagged of adjacently-tagged — de tool leest die attributen en produceert de output overeenkomstig.
Wordt mijn code opgeslagen?
Je code wordt naar de backend gestuurd voor conversie en wordt niet bewaard — we loggen de payload niet. Loop gevoelige code even na voordat je hem plakt.
En als de Rust lifetimes of generics gebruikt?
Lifetimes (&'a str) worden genegeerd — JSON kent het begrip niet. Concrete generics (Vec<User>) werken. Niet-geïnstantieerde generics komen eruit als null. Macros die naar echte syntax expanderen werken; macros die afhankelijk zijn van een proc-macro-crate die hier niet zichtbaar is, worden als opaak behandeld.
Andere tools die je nodig kunt hebben
Rust naar JSON is maar één puzzelstukje. Deze combineren goed: