Processamento JSON em Rust: visão geral das principais bibliotecas e ferramentas
JSON (JavaScript Object Notation) continua sendo um dos formatos mais populares para troca de dados entre serviços, arquivos de configuração e APIs. No ecossistema Rust, existem várias bibliotecas poderosas para trabalhar com JSON, cada uma resolvendo seus próprios desafios — desde desempenho máximo até facilidade de desenvolvimento. Neste artigo, analisaremos detalhadamente as principais ferramentas: serde_json, simd-json, json5, jsonwebtoken e mostraremos como usá-las em projetos reais.
1. serde_json — o padrão de facto
serde_json é a principal biblioteca para serialização e desserialização de JSON em Rust. Ela é construída sobre o framework serde, permitindo converter automaticamente estruturas de dados Rust para JSON e vice-versa.
Instalação: adicione ao Cargo.toml:
[dependencies]serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"Exemplo: serialização e desserialização
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()), };
// Serialização para string JSON let json_string = serde_json::to_string(&user)?; println!("JSON: {}", json_string);
// Desserialização de volta para a estrutura let deserialized: User = serde_json::from_str(&json_string)?; println!("{:?}", deserialized);
Ok(())}Recursos:
- Suporte para estruturas aninhadas, enumerações e campos opcionais.
- Trabalho com JSON arbitrário através de
serde_json::Value(enum com variantesNull,Bool,Number,String,Array,Object). - Serializadores personalizados através de atributos
#[serde(rename)],#[serde(skip)]e outros. - Processamento em streaming para arquivos grandes.
Quando usar: para 95% dos projetos — esta é a melhor escolha. É estável, bem documentada e se integra com qualquer framework web (Actix, Rocket, Axum).
2. simd-json — desempenho máximo
simd-json é uma biblioteca que utiliza instruções SIMD (Single Instruction, Multiple Data) do processador para acelerar o parsing de JSON. De acordo com testes, é 2 a 3 vezes mais rápida que serde_json em grandes volumes de dados.
Instalação:
[dependencies]simd-json = "0.14"Exemplo: parsing rápido
use simd_json::prelude::*;use simd_json::BorrowedValue;
fn main() { let mut data = br#"[{"city":"Москва","temp":22},{"city":"СПб","temp":18}]"#.to_vec(); // Parsing com mutação dos dados de entrada (para velocidade) 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("desconhecido"); let temp = item.get("temp").and_then(|v| v.as_f64()).unwrap_or(0.0); println!("{}: {}°C", city, temp); } }}Características:
- Funciona apenas em x86-64 com suporte a AVX2 (processadores modernos).
- Requer dados de entrada mutáveis (para evitar alocações desnecessárias).
- Suporta parsing em streaming e serialização através da macro
simd_json::json!.
<