JSON-Verarbeitung in Rust: Überblick über wichtige Bibliotheken und Werkzeuge
JSON (JavaScript Object Notation) bleibt eines der beliebtesten Formate für den Datenaustausch zwischen Diensten, Konfigurationsdateien und APIs. Im Rust-Ökosystem gibt es mehrere leistungsstarke Bibliotheken für die Arbeit mit JSON, die jeweils ihre eigenen Aufgaben lösen – von maximaler Leistung bis hin zu Entwicklerfreundlichkeit. In diesem Artikel werden wir die wichtigsten Werkzeuge im Detail besprechen: serde_json, simd-json, json5, jsonwebtoken und zeigen, wie man sie in realen Projekten einsetzt.
1. serde_json – der De-facto-Standard
serde_json ist die primäre Bibliothek für die Serialisierung und Deserialisierung von JSON in Rust. Sie baut auf dem serde-Framework auf, was eine automatische Umwandlung von Rust-Datenstrukturen in JSON und zurück ermöglicht.
Installation: Fügen Sie in Cargo.toml hinzu:
[dependencies]serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"Beispiel: Serialisierung und Deserialisierung
use serde::{Deserialize, Serialize};use serde_json::Result;
#[derive(Serialize, Deserialize, Debug)]struct User { name: String, age: u8, email: Option<String>,}
fn main() -> Result<()> { let user = User { name: "Anna".to_string(), age: 30, email: Some("anna@example.com".to_string()), };
// Serialisierung in einen JSON-String let json_string = serde_json::to_string(&user)?; println!("JSON: {}", json_string);
// Deserialisierung zurück in die Struktur let deserialized: User = serde_json::from_str(&json_string)?; println!("{:?}", deserialized);
Ok(())}Funktionen:
- Unterstützung für verschachtelte Strukturen, Aufzählungen und optionale Felder.
- Arbeit mit beliebigem JSON über
serde_json::Value(Enum mit VariantenNull,Bool,Number,String,Array,Object). - Benutzerdefinierte Serialisierer über Attribute wie
#[serde(rename)],#[serde(skip)]und andere. - Streaming-Verarbeitung für große Dateien.
Wann verwenden: Für 95% der Projekte ist dies die beste Wahl. Sie ist stabil, gut dokumentiert und integriert sich mit allen Web-Frameworks (Actix, Rocket, Axum).
2. simd-json – maximale Leistung
simd-json ist eine Bibliothek, die SIMD-Instruktionen (Single Instruction, Multiple Data) des Prozessors nutzt, um das JSON-Parsing zu beschleunigen. Laut Tests ist sie bei großen Datenmengen 2–3 Mal schneller als serde_json.
Installation:
[dependencies]simd-json = "0.14"Beispiel: Schnelles Parsing
use simd_json::prelude::*;use simd_json::BorrowedValue;
fn main() { let mut data = br#"[{"city":"Moskau","temp":22},{"city":"St. Petersburg","temp":18}]"#.to_vec(); // Parsing mit Mutation der Eingabedaten (für Geschwindigkeit) let value: BorrowedValue = simd_json::to_borrowed_value(&mut data).unwrap(); if let Some(arr) = value.as_array() { for item in arr { let city = item.get("city").and_then(|v| v.as_str()).unwrap_or("unbekannt"); let temp = item.get("temp").and_then(|v| v.as_f64()).unwrap_or(0.0); println!("{}: {}°C", city, temp); } }}Besonderheiten:
- Funktioniert nur auf x86-64 mit AVX2-Unterstützung (moderne Prozessoren).
- Erfordert veränderbare Eingabedaten (um unnötige Allokationen zu vermeiden).
- Unterstützt Streaming-Parsing und Serialisierung über das
simd_json::json!-Makro.
<
Auch in der Bibliothek
Konfiguration von C#-Anwendungen (.NET): Microsoft.Extensions.Configuration
Internationalisierung (i18n) in Swift: NSLocalizedString und String Catalog
Actix-web für Rust: Vollständiger Leitfaden mit Beispielen
PHP-Aufgabenplaner: Cron-ähnlicher Warteschlangenmanager in PHP