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.