Μάθετε πώς να μετατρέπετε δεδομένα μεταξύ μορφής JSON και αντικειμένων Rust χωρίς κόπο χρησιμοποιώντας τεχνικές σειριοποίησης και αποσειροποίησης στο Rust.

Το JSON (JavaScript Object Notation) έχει αναδειχθεί ως μια δημοφιλής μορφή ανταλλαγής δεδομένων στο λογισμικό ανάπτυξη λόγω της απλότητας, της αναγνωσιμότητας και της ευρείας υποστήριξης σε διάφορους προγραμματισμούς Γλώσσες. Το JSON είναι μια ελαφριά εναλλακτική της XML για τη μετάδοση δεδομένων μεταξύ ενός διακομιστή και μιας εφαρμογής Ιστού ή μεταξύ διαφορετικών στοιχείων συστήματος λογισμικού.

Μία από τις βασικές πτυχές της συνεργασίας με το JSON είναι η διαδικασία της σειριοποίησης και της αποσειροποίησης που σας επιτρέπει να μετατρέψετε δεδομένα JSON σε μια δομημένη μορφή που μπορείτε εύκολα να χειριστείτε μέσα σας προγράμματα. Τις περισσότερες φορές, εάν θέλετε να εργαστείτε με JSON σε άλλες γλώσσες, ίσως χρειαστεί να σειριοποιήσετε και να αποσειροποιήσετε τα δεδομένα JSON στις ενσωματωμένες δομές δεδομένων της γλώσσας.

Ξεκινώντας με το Serde

instagram viewer

Το Serde (serialization and deserialization) είναι μια ευρέως χρησιμοποιούμενη βιβλιοθήκη Rust που παρέχει ένα πλαίσιο για τη μετατροπή Σκουριά δομές δεδομένων σε μορφές για αποθήκευση, μετάδοση, κοινή χρήση και άλλα.

Το Serde επιτρέπει την απρόσκοπτη μετατροπή μεταξύ τύπων δεδομένων Rust και διαφόρων μορφών ανταλλαγής δεδομένων, συμπεριλαμβανομένων των JSON, YAML, BSON, CBOR, MessagePack και άλλων.

Η κύρια εστίαση της Serde είναι να κάνει τη διαδικασία σειριοποίησης και αποσειροποίησης όσο το δυνατόν πιο απλή και αποτελεσματική, διατηρώντας παράλληλα ισχυρά χαρακτηριστικά πληκτρολόγησης και ασφάλειας.

Προσθέστε αυτές τις οδηγίες στο εξαρτήσεις τμήμα σας Cargo.toml αρχείο για εγκατάσταση και χρήση Serde σαν εξάρτηση από τρίτους με το Cargo.

[εξαρτήσεις]
serde = { έκδοση = "1.0.159", χαρακτηριστικά = ["αντλώ"] }
serde_json = "1.0.96"

Θα χρειαστείτε και τα δύο serde και serde_json κιβώτια για αλληλεπίδραση με JSON. ο serde το crate παρέχει τις βασικές λειτουργίες και το serde_json Το crate είναι μια συγκεκριμένη υλοποίηση του Serde για εργασία με JSON.

Δείτε πώς μπορείτε να εισαγάγετε το serde_json κλουβί και το Σειριακή και Deserialize ενότητες από το serde σακαράκα:

χρήση serde::{Serialize, Deserialize};
χρήση serde_json;

Συνολικά, το Serde είναι ένα ισχυρό εργαλείο που θα χρειαστείτε στο οπλοστάσιο ανάπτυξής σας εάν εργάζεστε με το JSON στο Rust.

Σειριοποίηση δεδομένων με Serde

Η διαδικασία σειριοποίησης JSON συνεπάγεται τη μετατροπή ενός τύπου Rust (προσαρμοσμένο ή ενσωματωμένο) σε JSON για άλλες λειτουργίες. Το Serde παρέχει ένα σύνολο χαρακτηριστικών που μπορείτε να χρησιμοποιήσετε με το Rust struct για να ενεργοποιήσετε τον ακριβή έλεγχο της διαδικασίας σειριοποίησης, συμπεριλαμβανομένων των #[παραγωγή (Σειριοποίηση)] χαρακτηριστικό που σας επιτρέπει να δημιουργήσετε κώδικα σειριοποίησης για τις δομές δεδομένων σας και να μετατρέψετε τη δομή Rust σε JSON.

Σκεφτείτε ότι αυτή η δομή αντιπροσωπεύει τα βιολογικά δεδομένα ενός ατόμου. Δείτε πώς μπορείτε να εισαγάγετε και να χρησιμοποιήσετε το Σειριακή χαρακτηριστικό στη δομή:

χρήση serde::{Serialize, Deserialize};
χρήση serde_json;

#[παραγωγή (Σειριοποίηση)]
structΠρόσωπο {
όνομα: Σειρά,
ηλικία: u32,
}

Με σχολιασμό του Πρόσωπο struct με το [#derive (Serialize)], λέτε στον Serde να δημιουργήσει τον απαραίτητο κωδικό σειριοποίησης για το Πρόσωπο struct αυτόματα.

Δείτε πώς μπορείτε να σειριοποιήσετε μια παρουσία του Πρόσωπο struct σε JSON:

χρήση serde::{Σειρά};
χρήση serde_json;

στκύριος() {
// δήλωση της παρουσίας της δομής Person με τα πεδία όνομα και ηλικία
αφήνω άτομο = Άτομο {
όνομα: "Chukwuemeriwo".to_string(),
ηλικία: 28,
};

// σειριοποιεί τη δομή ατόμου σε JSON χρησιμοποιώντας τη βιβλιοθήκη serde_json
αφήνω json = serde_json:: to_string(&person).expect("Η σειριοποίηση απέτυχε");

// εκτυπώνει τη σειριακή συμβολοσειρά JSON
println!("Σειριοποιημένο JSON: {}", json);
}

Στο κύριος λειτουργία, η serde_json crate σειριοποιεί το πρόσωπο αντικείμενο. ο to_string η συνάρτηση λαμβάνει μια αναφορά στο πρόσωπο αντικείμενο και επιστρέφει μια συμβολοσειρά JSON που αντιπροσωπεύει τα σειριακά δεδομένα.

Τέλος, το κύριος Η λειτουργία εκτυπώνει το σειριακό JSON στην κονσόλα.

ο serde και serde_json είναι ευέλικτα, μπορείτε επίσης να σειριοποιήσετε πίνακες με serde.

χρήση serde::{Serialize, Deserialize};
χρήση serde_json;

#[παραγωγή (Σειριοποίηση)]
structΣυντεταγμένες {
Χ: f32,
y: f32,
}

στκύριος() {
αφήνω πόντοι = vec![
Συντεταγμένες { x: 1.0, y: 2.0 },
Συντεταγμένες { x: 3.5, y: 4.5 },
];

αφήνω json = serde_json:: to_string(&points).expect("Η σειριοποίηση απέτυχε");

println!("Σειριοποιημένο JSON: {}", json); // Εκτυπώστε τη σειριακή συμβολοσειρά JSON
}

ο σημεία η μεταβλητή είναι ένα διάνυσμα του Συντεταγμένες δομές που αντιπροσωπεύουν σημεία σε ένα επίπεδο. Εφαρμόζοντας το Σειριακή αποδίδουν στο Συντεταγμένες Το struct σάς επιτρέπει να σειριοποιήσετε το διάνυσμα σε JSON χωρίς κόπο.

Επιπλέον, μπορείτε να σειριοποιήσετε τους αριθμούς σε JSON με serde όπως κάνετε σειριακές δομές και διανύσματα.

χρήση serde::{Serialize, Deserialize};
χρήση serde_json;

#[παραγωγή (Serialize, Deserialize)]
αρίθμησηΖώο {
Σκύλος(Σειρά),
Γάτα(u32),
Πουλί,
}

στκύριος() {
αφήνω σκύλος = Ζώο:: Σκύλος("Σκουριασμένος".to_string());

αφήνω json = serde_json:: to_string(&dog).expect("Η σειριοποίηση απέτυχε");

println!("Σειριοποιημένο JSON: {}", json);
}

Ανάλογα με την παραλλαγή, η διαδικασία σειριοποίησης προσαρμόζεται ανάλογα (στην περίπτωση αυτή, η Ζώο:: Σκύλος παραλλαγή περιλαμβάνει α Σειρά πεδίο που ο Serde θα σειριοποιήσει ως συμβολοσειρά JSON).

Deserialization δεδομένων με Serde

Το JSON deserialization είναι η διαδικασία μετατροπής δεδομένων JSON σε εγγενείς τύπους δεδομένων μιας γλώσσας προγραμματισμού. Το Serde παρέχει ένα ολοκληρωμένο πλαίσιο για την αποσειροποίηση JSON που λειτουργεί στους περισσότερους ενσωματωμένους τύπους δεδομένων.

Παρόμοια με τη σειριοποίηση, το Serde προσφέρει χαρακτηριστικά που μπορείτε να χρησιμοποιήσετε για να σχολιάσετε τις δομές Rust για τη διαδικασία αποσειροποίησης. Δύο χαρακτηριστικά που χρησιμοποιούνται συνήθως για σειριοποίηση είναι τα #[εξαγωγή (Deserialize)] και #[serde (μετονομασία = "json_field_name")] γνωρίσματα.

ο #[εξαγωγή (Deserialize)] Το χαρακτηριστικό εξάγει αυτόματα την υλοποίηση αποσειριοποίησης για εσάς Τύποι κατασκευών σκουριάς, ενώ το #[serde (μετονομασία = "json_field_name")] Το χαρακτηριστικό σάς επιτρέπει να αντιστοιχίσετε πεδία δομής σε αντίστοιχα ονόματα πεδίων JSON.

Δείτε πώς μπορείτε να αποσειροποιήσετε τα δεδομένα JSON σε έναν προσαρμοσμένο τύπο δομής με το Serde:

χρήση serde:: Deserialize;
χρήση serde_json;

// ορίζει μια δομή για το πρόσωπο με το χαρακτηριστικό Deserialize από το Serde
#[εξαγωγή (Deserialize)]
structΠρόσωπο {
#[serde (μετονομασία = "όνομα")]// μετονομάζει το πεδίο σε "όνομα"
πλήρες όνομα: Σειρά,
ηλικία: u32,
}

στκύριος() {
αφήνω json_data = r#"
{
"όνομα": "John Doe",
"ηλικία": 30
}
"#;

// αποσειροποιεί τα δεδομένα JSON σε μια δομή Person
αφήνω πρόσωπο: Person = serde_json:: from_str (json_data).unwrap();

// Εκτυπώστε το πλήρες όνομα και την ηλικία του ατόμου
println!("Ονομα: {}", person.full_name);
println!("Ηλικία: {}", άτομο.ηλικία);
}

Με σχολιασμό του Πρόσωπο struct με το #[εξαγωγή (Deserialize)] χαρακτηριστικό, υποδεικνύετε ότι ο Serde μπορεί να αποσειροποιήσει τη δομή από το JSON. ο #[serde (μετονομασία = "όνομα")] χαρακτηριστικό χαρτών το όνομα πεδίο στο JSON στο πλήρες όνομα πεδίο.

ο από_στρ συνάρτηση αποσημειώνει το json_data μεταβλητή στο πρόσωπο αντικείμενο, και το κύριος λειτουργία εκτυπώνει τα πεδία στην κονσόλα.

Το Serde υποστηρίζει την αποσειροποίηση σε διάφορους τύπους δεδομένων Rust, συμπεριλαμβανομένων των πρωτόγονων τύπων, των enums, των ένθετων δομών και των συλλογών.

Δείτε πώς μπορείτε να αποσειροποιήσετε έναν πίνακα JSON σε μια δομή Rust που περιέχει ένα διανυσματικό πεδίο:

χρήση serde:: Deserialize;

#[εξαγωγή (Deserialize)]
structΔεδομένα {
αριθμοί: Vec<u32>,
}

στκύριος() {
αφήνω json_data = r#"
{
"αριθμοί": [1, 2, 3, 4, 5]
}
"#;

αφήνω data: Data = serde_json:: from_str (json_data).unwrap();

Για αριθμός σε data.numbers {
println!("Αριθμός: {}", αριθμός);
}
}

ο κύριος συνάρτηση αποσημειώνει το json_data περιεχόμενο JSON στο δεδομένα μεταβλητή και ο βρόχος εκτυπώνει τα στοιχεία στο διάνυσμα.

Πρέπει να διασφαλίσετε ότι διαθέτετε τους σωστούς τύπους δεδομένων και αναγνωριστικά για μια διαδικασία αφαίρεσης.

Το Serde διαλειτουργεί με δημοφιλή πλαίσια Ιστού Rust

Το Serde είναι μια ισχυρή βιβλιοθήκη με πολλές δυνατότητες και ένα απλό API για σειριοποίηση και αποσειροποίηση δεδομένων σε διαφορετικές μορφές.

Το Serde είναι ευρέως διαδεδομένο στο οικοσύστημα Rust και πολλά δημοφιλή κιβώτια και πλαίσια έχουν ενσωματωμένο υποστήριξη για το Serde, συμπεριλαμβανομένων των δημοφιλών πλαισίων ιστού όπως το Actix, το Warp και το Rocket και τα ORM βάσης δεδομένων όπως Ντίζελ.