Traitement JSON en Rust : serde_json, simd-json, json5 et autres bibliothèques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Traitement JSON en Rust : aperçu des bibliothèques et outils clés



JSON (JavaScript Object Notation) reste l'un des formats les plus populaires pour l'échange de données entre services, fichiers de configuration et API. Dans l'écosystème Rust, il existe plusieurs bibliothèques puissantes pour travailler avec JSON, chacune répondant à des besoins spécifiques — de la performance maximale à la facilité de développement. Dans cet article, nous allons détailler les principaux outils : serde_json, simd-json, json5, jsonwebtoken et montrer comment les utiliser dans des projets réels.



1. serde_json — le standard de facto



serde_json est la bibliothèque principale pour la sérialisation et la désérialisation JSON en Rust. Elle est construite sur le framework serde, ce qui permet de convertir automatiquement les structures de données Rust en JSON et vice versa.



Installation : ajoutez dans Cargo.toml :



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


Exemple : sérialisation et désérialisation



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: "Анна".to_string(), age: 30, email: Some("anna@example.com".to_string()), };

// Sérialisation en chaîne JSON let json_string = serde_json::to_string(&user)?; println!("JSON: {}", json_string);

// Désérialisation en structure let deserialized: User = serde_json::from_str(&json_string)?; println!("{:?}", deserialized);

Ok(())}


Fonctionnalités :

  • Prise en charge des structures imbriquées, des énumérations et des champs optionnels.
  • Travail avec du JSON arbitraire via serde_json::Value (enum avec les variantes Null, Bool, Number, String, Array, Object).
  • Sérialiseurs personnalisés via les attributs #[serde(rename)], #[serde(skip)] et autres.
  • Traitement en flux (streaming) pour les gros fichiers.


Quand l'utiliser : pour 95% des projets — c'est le meilleur choix. Il est stable, bien documenté et s'intègre avec tous les frameworks web (Actix, Rocket, Axum).



2. simd-json — performance maximale



simd-json est une bibliothèque qui utilise les instructions SIMD (Single Instruction, Multiple Data) du processeur pour accélérer l'analyse JSON. Selon les tests, elle est 2 à 3 fois plus rapide que serde_json sur de grands volumes de données.



Installation :



[dependencies]simd-json = "0.14"


Exemple : analyse rapide



use simd_json::prelude::*;use simd_json::BorrowedValue;

fn main() { let mut data = br#"[{"city":"Москва","temp":22},{"city":"СПб","temp":18}]"#.to_vec(); // Analyse avec mutation des données d'entrée (pour la vitesse) 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("inconnu"); let temp = item.get("temp").and_then(|v| v.as_f64()).unwrap_or(0.0); println!("{}: {}°C", city, temp); } }}


Particularités :

  • Fonctionne uniquement sur x86-64 avec support AVX2 (processeurs modernes).
  • Nécessite des données d'entrée mutables (pour éviter les allocations inutiles).
  • Prend en charge l'analyse en flux et la sérialisation via la macro simd_json::json!.


<

Recommendations