Uso del JSON
serde_json
Uso del JSON è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.
La crate serde_json
serde_json è l'implementazione del formato JSON per serde. Fornisce funzioni per convertire i valori Rust in testo JSON e viceversa.
to_string/from_strper il testoValueper il JSON dinamico
Da struct a stringa JSON
serde_json::to_string serializza qualsiasi valore Serialize in una stringa JSON.
use serde::Serialize;
#[derive(Serialize)]
struct User { id: u32, name: String }
fn main() {
let u = User { id: 1, name: "Alice".to_string() };
let json = serde_json::to_string(&u).unwrap();
println!("{}", json);
}Da stringa JSON a struct
serde_json::from_str analizza il JSON e lo converte in un valore tipizzato, restituendo un Result per consentire di gestire input non validi.
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct User { id: u32, name: String }
fn main() {
let data = r#"{"id":1,"name":"Alice"}"#;
let u: User = serde_json::from_str(data).unwrap();
println!("{:?}", u);
}Formattazione leggibile
Utilizzate to_string_pretty per ottenere JSON indentato e leggibile, utile per i file di configurazione e il debugging.
use serde::Serialize;
#[derive(Serialize)]
struct Cfg { debug: bool, level: u8 }
fn main() {
let c = Cfg { debug: true, level: 3 };
println!("{}", serde_json::to_string_pretty(&c).unwrap());
}La macro json!
Costruite JSON direttamente nel codice con la macro json!, che produce un Value senza dover definire una struct.
use serde_json::json;
fn main() {
let v = json!({
"name": "Alice",
"roles": ["admin", "user"]
});
println!("{}", v);
}Il tipo Value
serde_json::Value è un enum che rappresenta qualsiasi nodo JSON: null, booleano, numero, stringa, array o oggetto. Utilizzatelo quando la struttura non è nota.
use serde_json::Value;
fn main() {
let data = r#"{"name":"Bob","age":30}"#;
let v: Value = serde_json::from_str(data).unwrap();
println!("{}", v["name"]);
println!("{}", v["age"]);
}Lettura sicura da Value
L'accesso tramite indice restituisce un Value; utilizzate metodi di accesso come as_str o as_i64, che restituiscono Option, per leggere in modo sicuro i dati tipizzati.
use serde_json::Value;
fn name_of(v: &Value) -> Option<&str> {
v.get("name")?.as_str()
}Modellare l'accesso al JSON in Rust puro
La lettura di un valore tramite chiave, con un valore alternativo quando la chiave è assente, rispecchia il modo in cui si interroga un oggetto Value. Ecco lo stesso approccio con una HashMap.
use std::collections::HashMap;
fn main() {
let mut obj: HashMap<&str, &str> = HashMap::new();
obj.insert("name", "Alice");
let name = obj.get("name").copied().unwrap_or("unknown");
let city = obj.get("city").copied().unwrap_or("unknown");
println!("name={} city={}", name, city);
}Byte e writer
Per ottenere migliori prestazioni, to_vec serializza in byte, mentre to_writer trasmette direttamente a qualsiasi io::Write, ad esempio un file o un socket.
use serde::Serialize;
#[derive(Serialize)]
struct Msg { text: String }
fn to_bytes(m: &Msg) -> Vec<u8> {
serde_json::to_vec(m).unwrap()
}Gestione degli errori di analisi
from_str restituisce un Result. Gestite l'errore con un match per mostrare agli utenti un messaggio utile invece di causare un panic.
use serde::Deserialize;
#[derive(Deserialize)]
struct User { id: u32 }
fn parse(s: &str) -> String {
match serde_json::from_str::<User>(s) {
Ok(u) => format!("id {}", u.id),
Err(e) => format!("invalid JSON: {}", e),
}
}Conversione tra Value e struct
serde_json::from_value e to_value convertono una struct tipizzata in un Value dinamico e viceversa, quando servono entrambi.
use serde::Deserialize;
use serde_json::json;
#[derive(Deserialize)]
struct User { name: String }
fn main() {
let v = json!({"name": "Eve"});
let u: User = serde_json::from_value(v).unwrap();
println!("{}", u.name);
}Verifica rapida
Verificate la vostra comprensione dell'utilizzo del JSON.
Riepilogo
Avete imparato a gestire il JSON con serde_json:
to_string/from_strconvertono le struct in testo JSON e viceversato_string_prettyformatta il JSON in modo leggibile- La macro
json!eValuegestiscono il JSON dinamico - Utilizzate i metodi di accesso e
Resultper leggere e analizzare i dati in sicurezza
Avanti: personalizzare la serializzazione con gli attributi dei campi.
Impara Rust con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 39
- Lezioni
- 144
Domande Frequenti
La lezione «Uso del JSON» è gratuita?
Sì — il testo completo di «Uso del JSON» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.
Cosa imparerò in «Uso del JSON»?
serde_json Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Uso del JSON»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.