JSON-Verarbeitung in Rust: Die Bibliotheken serde_json und json

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

JSON-Verarbeitung in Rust: serde_json und die Arbeit mit Daten



JSON (JavaScript Object Notation) bleibt eines der beliebtesten Formate für den Datenaustausch in der Webentwicklung, bei APIs und in Konfigurationsdateien. In der Sprache Rust, bekannt für ihre Leistung und Sicherheit, wird die Arbeit mit JSON durch ein leistungsstarkes Ökosystem von Crates realisiert. Das wichtigste Werkzeug ist die Bibliothek serde_json, die auf dem Serialisierungs-Framework serde aufbaut. In diesem Artikel werden wir im Detail besprechen, wie man JSON in Rust parst, erstellt und umwandelt, und auch alternative Ansätze betrachten.



1. Installation und Einbindung von serde_json



Fügen Sie zunächst die Abhängigkeiten zur Datei Cargo.toml hinzu:



[dependencies]serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"


serde stellt die Traits Serialize und Deserialize bereit, und serde_json die konkrete Implementierung für JSON. Nach dem Hinzufügen der Crates können Sie diese in den Code importieren:



use serde::{Deserialize, Serialize};use serde_json::Result;


2. Serialisierung von Strukturen in JSON



Um eine Rust-Struktur in JSON umzuwandeln, müssen Sie sie mit den Attributen #[derive(Serialize)] annotieren. Betrachten wir ein Beispiel mit Benutzerdaten:



#[derive(Serialize)]struct User {    name: String,    age: u8,    email: String,    active: bool,}

fn main() -> Result<()> { let user = User { name: "Alexej".to_string(), age: 30, email: "alex@example.com".to_string(), active: true, };

let json = serde_json::to_string(&user)?; println!("{}", json); // Ausgabe: {"name":"Alexej","age":30,"email":"alex@example.com","active":true} Ok(())}


Die Methode serde_json::to_string gibt ein Result<String> zurück. Verwenden Sie für formatierte Ausgabe serde_json::to_string_pretty.



3. Deserialisierung von JSON in Strukturen



Der umgekehrte Prozess – die Umwandlung eines JSON-Strings in eine Rust-Struktur. Dafür muss die Struktur Deserialize implementieren:



#[derive(Deserialize, Debug)]struct User {    name: String,    age: u8,    email: String,    active: bool,}

fn main() -> Result<()> { let data = r#" { "name": "Maria", "age": 25, "email": "maria@example.com", "active": false }"#;

let user: User = serde_json::from_str(data)?; println!("{:?}", user); // Ausgabe: User { name: "Maria", age: 25, email: "maria@example.com", active: false } Ok(())}


Wenn JSON Felder enthält, die in der Struktur fehlen, oder umgekehrt, verwenden Sie die Attribute #[serde(default)] oder #[serde(skip_serializing_if = "Option::is_none")].



4. Arbeiten mit beliebigem JSON (Value)



Manchmal ist die Datenstruktur im Voraus nicht bekannt. In solchen Fällen wird die Enumeration serde_json::Value verwendet, die jeden JSON-Typ darstellen kann:



use serde_json::Value;

fn main() -> Result<()> { let data = r#" { "name": "Iwan", "age": 35, "hobbies": ["Lesen", "Programmieren"], "address": null }"#;

let v: Value = serde_json::from_str(data)?;

// Zugriff auf Felder if let Some(name) = v.get("name") { println!("Name: {}", name); }

// Array extrahieren if let Some(hobbies) = v.get("hobbies").and_then(|h| h.as_array()) { for hobby in hobbies { println!("Hobby: {}", hobby); } }

Ok(())}


Value unterstützt Methoden wie as_str(), as_u64(), as_array() und andere zum sicheren Extrahieren von Daten.

\

Empfehlungen