Ugrás a tartalomhoz
100% helyi

JSON-ből Rust struct

Egy JSON dokumentumot Rust structkra konvertálj serde-vel kompatibilis formában.

Bemenet
Kimenet

JSON-ből Rust struct

Illessz be egy JSON objektumot vagy tömböt, és ez az eszköz generálja az illeszkedő Rust structokat, amelyeket közvetlenül beilleszthetsz egy serde szerializációt használó projektbe. Megspórolja a teigedet a manuális típusdefiníciók és derive attribútumok írásától, amikor egy API válasz vagy konfigurációs fájl megváltozik.

A beállítások azt szabályozzák, hogyan néz ki a generált kód. Válaszd meg, mely trait-okat kell derive-olni — Debug, Clone, Serialize, Deserialize, PartialEq — és hogy szükséges-e a #[serde(rename_all = "camelCase")] attribútum, hogy az idiomatikus snake_case Rust mezők helyesen deserializálódjanak a camelCase JSON kulcsokból. A null értékek automatikusan Option<T> lehet, és az egész számokhoz az i32, i64 vagy u64, a szöveghez pedig a String vagy a kölcsönzött &str (lifetime-mal) választható. A beágyazott objektumok generálódhatnak külön top-level structként vagy a saját pub mod-jukba csomagolva, a mezők pedig lehetnek nyilvánossá vagy privát.

Az objektum tömbök egyetlen structba egyesülnek: egy mező, amely csak néhány elemben van jelen, automatikusan Option<T> lesz, így az egy néhány szöveggel generált struct még az egész adathalmaznak is megfelel. A mezőnevek snake_case-re alakulnak, a Rust kulcsszavak nyers azonosítóvá válnak, mint az r#type, és az nem tisztán reprezentálható név helyette az eredeti kulcsot megtartja a #[serde(rename = "...")] attribútumon keresztül.

Minden lokálisan az böngészödben fut — a JSON-od soha nem kerül fel máshová, így biztonságos az igazi API válaszokat vagy konfigurációs adatokat beilleszteni. Másold ki a generált kódot, töltsd le .txt fájlként, vagy küldd vissza az outputot az inputba további finomításhoz.

Gyakori kérdések

Telepíti a serde-t vagy hozzáadja a Cargo.toml-hoz?
Nem. Csak a struct kódot generálja. Add a serde-t a derive feature-ral külön a Cargo.toml-odhoz: serde = { version = "1", features = ["derive"] }.
Mi történik egy mezővel, amely null az egyes rekordokban és más helyeken jelen van?
Ha a "Null mezőket Option<T> értékkel burkolni" be van kapcsolva, az a mező Option<T> lesz, így helyesen deserializálódik, függetlenül attól, hogy jelen van-e, null vagy hiányzik-e.
Miért kap egy mező a #[serde(rename = "...")] attribútumot?
Ez akkor jelenik meg, amikor a camelCase átnevezés ki van kapcsolva, és a JSON kulcs nem felel meg a generált snake_case Rust mező névnek, így az eredeti kulcs deserializáláshoz megmarad.
Generálhat structokat egy tömbbel a felső szinten?
Igen. Az objektumok tömbje egy pub type Root = Vec<Item>; típusalias-t hoz létre, valamint az Item struct-ot, amely a tömb összes elemének mezőit egyesíti.
A JSON-om valahova fel van töltve?
Nem. A struct generálás teljesen a böngészödben fut — a JSON-od soha nem hagyja el a készülékedet.