Processamento JSON em Rust: serde_json, simd-json, json5 e outras bibliotecas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 variantes Null, 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!.


<

Recommendations