Procesamiento de JSON en Rust: serde_json, simd-json, json5 y otras bibliotecas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Procesamiento de JSON en Rust: revisión de bibliotecas y herramientas clave



JSON (JavaScript Object Notation) sigue siendo uno de los formatos más populares para el intercambio de datos entre servicios, archivos de configuración y API. En el ecosistema de Rust existen varias bibliotecas potentes para trabajar con JSON, cada una de las cuales resuelve sus propias tareas, desde el máximo rendimiento hasta la facilidad de desarrollo. En este artículo, analizaremos en detalle las herramientas principales: serde_json, simd-json, json5, jsonwebtoken y mostraremos cómo usarlas en proyectos reales.



1. serde_json — el estándar de facto



serde_json es la biblioteca principal para la serialización y deserialización de JSON en Rust. Está construida sobre el framework serde, lo que permite transformar automáticamente las estructuras de datos de Rust a JSON y viceversa.



Instalación: agregue en Cargo.toml:



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


Ejemplo: serialización y deserialización



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

// Serialización a cadena JSON let json_string = serde_json::to_string(&user)?; println!("JSON: {}", json_string);

// Deserialización de vuelta a la estructura let deserialized: User = serde_json::from_str(&json_string)?; println!("{:?}", deserialized);

Ok(())}


Capacidades:

  • Soporte para estructuras anidadas, enumeraciones y campos opcionales.
  • Trabajo con JSON arbitrario a través de serde_json::Value (enum con variantes Null, Bool, Number, String, Array, Object).
  • Serializadores personalizados mediante atributos #[serde(rename)], #[serde(skip)] y otros.
  • Procesamiento por flujo (streaming) para archivos grandes.


Cuándo usarlo: para el 95% de los proyectos, es la mejor opción. Es estable, está bien documentado y se integra con cualquier framework web (Actix, Rocket, Axum).



2. simd-json — máximo rendimiento



simd-json es una biblioteca que utiliza instrucciones SIMD (Single Instruction, Multiple Data) del procesador para acelerar el análisis de JSON. Según las pruebas, es de 2 a 3 veces más rápida que serde_json en grandes volúmenes de datos.



Instalación:



[dependencies]simd-json = "0.14"


Ejemplo: análisis rápido



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

fn main() { let mut data = br#"[{"city":"Moscú","temp":22},{"city":"SPb","temp":18}]"#.to_vec(); // Análisis con mutación de datos de entrada (para velocidad) 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("desconocido"); let temp = item.get("temp").and_then(|v| v.as_f64()).unwrap_or(0.0); println!("{}: {}°C", city, temp); } }}


Características:

  • Solo funciona en x86-64 con soporte AVX2 (procesadores modernos).
  • Requiere datos de entrada mutables (para evitar asignaciones innecesarias).
  • Soporta análisis por flujo y serialización a través de la macro simd_json::json!.


<

Recommendations