Naučite kako pretvoriti podatke između JSON formata i Rust objekata bez napora koristeći tehnike serijalizacije i deserijalizacije u Rustu.
JSON (JavaScript Object Notation) pojavio se kao popularan format razmjene podataka u softveru razvoj zbog svoje jednostavnosti, čitljivosti i široke podrške u raznim programima Jezici. JSON je lagana alternativa XML-u za prijenos podataka između poslužitelja i web aplikacije ili između različitih komponenti softverskog sustava.
Jedan od ključnih aspekata rada s JSON-om je proces serijalizacije i deserijalizacije koji omogućuje vam pretvaranje JSON podataka u strukturirani format kojim možete lako manipulirati unutar vašeg programa. U većini slučajeva, ako želite raditi s JSON-om na drugim jezicima, možda ćete morati serijalizirati i deserijalizirati JSON podatke u strukturu podataka ugrađenu u jezik.
Početak rada sa Serdeom
Serde (serijalizacija i deserijalizacija) široko je korištena Rust biblioteka koja pruža okvir za pretvaranje Strukture podataka Rust u formate za pohranu, prijenos, dijeljenje i druge.
Serde omogućuje besprijekornu konverziju između Rust vrsta podataka i raznih formata za razmjenu podataka, uključujući JSON, YAML, BSON, CBOR, MessagePack i druge.
Serdeov primarni fokus je učiniti proces serijalizacije i deserijalizacije što je moguće jednostavnijim i učinkovitijim uz zadržavanje snažnih tipskih i sigurnosnih značajki.
Dodajte ove direktive u ovisnosti dio vašeg Teret.toml datoteku za instaliranje i korištenje Serde kao ovisnost treće strane o Cargu.
[ovisnosti]
serde = { verzija = "1.0.159", karakteristike = ["izvesti"] }
serde_json = "1.0.96"
Trebat će vam oboje serde i serde_json sanduke za interakciju s JSON-om. The serde sanduk pruža osnovne funkcije, a serde_json crate je specifična implementacija Serdea za rad s JSON-om.
Evo kako možete uvesti serde_json sanduk i Serialize i Deserijalizirati moduli iz serde sanduk:
koristiti serde::{Serialize, Deserialize};
koristiti serde_json;
Sve u svemu, Serde je moćan alat koji će vam trebati u vašem razvojnom arsenalu ako radite s JSON-om u Rustu.
Serijalizacija podataka pomoću Serdea
Proces JSON serijalizacije podrazumijeva pretvaranje Rust tipa (prilagođenog ili ugrađenog) u JSON za druge operacije. Serde pruža skup atributa koje možete koristiti s Rust strukturom kako biste omogućili preciznu kontrolu nad procesom serijalizacije, uključujući #[izvedi (serializiraj)] atribut koji vam omogućuje generiranje koda za serijalizaciju za vaše podatkovne strukture i pretvaranje vaše Rust strukture u JSON.
Razmotrite ovu strukturu koja predstavlja biološke podatke osobe; evo kako možete uvesti i koristiti Serialize atribut na strukturi:
koristiti serde::{Serialize, Deserialize};
koristiti serde_json;
#[izvedi (serializiraj)]
strukturiratiOsoba {
Ime: Niz,
dob: u32,
}
Anotiranjem Osoba strukturirati s [#derive (Serialize)], govorite Serdeu da generira potreban serijalizacijski kod za Osoba strukturirati automatski.
Evo kako možete serijalizirati instancu Osoba struktura u JSON:
koristiti serde::{Serialize};
koristiti serde_json;fnglavni() {
// deklaracija instance strukture osobe s poljima za ime i dob
neka osoba = osoba {
Ime: "Chukwuemeriwo".to_string(),
dob: 28,
};// serijalizira strukturu osobe u JSON pomoću biblioteke serde_json
neka json = serde_json:: to_string(&osoba).expect("Serijalizacija nije uspjela");
// ispisuje serijalizirani JSON niz
println!("Serializirani JSON: {}", json);
}
u glavni funkcija, serde_json sanduk serijalizira osoba objekt. The na_string funkcija uzima referencu na osoba objekt i vraća JSON niz koji predstavlja serijalizirane podatke.
Konačno, glavni funkcija ispisuje serijalizirani JSON na konzolu.
The serde i serde_json su svestrani, također možete serijalizirati nizove pomoću serde.
koristiti serde::{Serialize, Deserialize};
koristiti serde_json;#[izvedi (serializiraj)]
strukturiratiKoordinate {
x: f32,
y: f32,
}fnglavni() {
neka bodovi = vec![
Koordinate { x: 1.0, y: 2.0 },
Koordinate { x: 3.5, y: 4.5 },
];neka json = serde_json:: to_string(&points).expect("Serijalizacija nije uspjela");
println!("Serializirani JSON: {}", json); // Ispis serijaliziranog JSON niza
}
The bodova varijabla je vektor od Koordinate strukture koje predstavljaju točke na ravnini. Primjenom Serialize pripisati Koordinate struct omogućuje vam serijalizaciju vektora u JSON bez napora.
Dodatno, enume možete serijalizirati u JSON s serde poput serijalizacije struktura i vektora.
koristiti serde::{Serialize, Deserialize};
koristiti serde_json;#[derive (Serialize, Deserialize)]
nabrajanjeŽivotinja {
Pas(Niz),
Mačka(u32),
Ptica,
}fnglavni() {
neka pas = Životinja:: Pas("Zapušten".to_string());neka json = serde_json:: to_string(&dog).expect("Serijalizacija nije uspjela");
println!("Serializirani JSON: {}", json);
}
Ovisno o varijanti, postupak serijalizacije se prilagođava (u ovom slučaju, Životinja:: Pas varijanta uključuje a Niz polje koje će Serde serijalizirati kao JSON niz).
Deserijalizacija podataka pomoću Serdea
JSON deserijalizacija je proces transformacije JSON podataka u izvorne tipove podataka programskog jezika. Serde pruža opsežan okvir za deserijalizaciju JSON-a koji radi na većini ugrađenih tipova podataka.
Slično serijalizaciji, Serde nudi atribute koje možete koristiti za označavanje svojih Rust struktura za proces deserijalizacije. Dva često korištena atributa za serijalizaciju su #[izvedi (deserijaliziraj)] i #[serde (rename = "json_field_name")] atributi.
The #[izvedi (deserijaliziraj)] atribut automatski izvodi implementaciju deserijalizacije za vaš Vrste struktura hrđe, dok #[serde (rename = "json_field_name")] atribut vam omogućuje mapiranje struct polja u odgovarajuća JSON imena polja.
Evo kako pomoću Serdea možete deserijalizirati JSON podatke u prilagođeni tip strukture:
koristiti serde:: Deserijalizacija;
koristiti serde_json;// definira strukturu za osobu sa svojstvom Deserialize iz Serdea
#[izvedi (deserijaliziraj)]
strukturiratiOsoba {
#[serde (preimenuj = "Ime")]// preimenuje polje u "name"
puno ime: Niz,
dob: u32,
}fnglavni() {
neka json_data = r#"
{
"Ime": "John Doe",
"dob": 30
}
"#;// deserijalizira JSON podatke u strukturu osobe
neka osoba: Osoba = serde_json:: from_str (json_data).unwrap();
// Ispiši puno ime i dob osobe
println!("Ime: {}", osoba.puno_ime);
println!("Dob: {}", osoba.dob);
}
Anotiranjem Osoba strukturirati s #[izvedi (deserijaliziraj)] atribut, pokazujete da Serde može deserijalizirati strukturu iz JSON-a. The #[serde (preimenuj = "ime")] atribut preslikava Ime polje u JSON-u na puno ime polje.
The from_str funkcija deserijalizira json_podaci varijabla u osoba objekt, i glavni funkcija ispisuje polja na konzolu.
Serde podržava deserijalizaciju na raznim Rust tipovima podataka, uključujući primitivne tipove, enume, ugniježđene strukture i zbirke.
Evo kako možete deserijalizirati JSON polje u Rust strukturu koja sadrži vektorsko polje:
koristiti serde:: Deserijalizacija;
#[izvedi (deserijaliziraj)]
strukturiratiPodaci {
brojevi: Vec<u32>,
}fnglavni() {
neka json_data = r#"
{
"brojevi": [1, 2, 3, 4, 5]
}
"#;neka podaci: Podaci = serde_json:: from_str (json_podaci).unwrap();
za broj u data.numbers {
println!("Broj: {}", broj);
}
}
The glavni funkcija deserijalizira json_podaci JSON sadržaj u podaci varijabla, a petlja ispisuje elemente u vektoru.
Morate osigurati da imate prave tipove podataka i identifikatore za proces deserijalizacije.
Serde surađuje s popularnim Rust web okvirima
Serde je moćna biblioteka s mnogo značajki i jednostavnim API-jem za serijalizaciju i deserijalizaciju podataka u različite formate.
Serde je široko prihvaćen u Rust ekosustavu, a mnogi popularni sanduci i okviri imaju ugrađene podrška za Serde, uključujući popularne web okvire kao što su Actix, Warp i Rocket i ORM baze podataka poput Dizel.