Работа с JSON
serde_json
«Работа с JSON» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
The serde_json crate
serde_json is the JSON format implementation for serde. It provides functions to convert between Rust values and JSON text.
to_string/from_strfor textValuefor dynamic JSON
Struct to JSON string
serde_json::to_string serializes any Serialize value to a JSON string.
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);
}JSON string to struct
serde_json::from_str parses JSON into a typed value, returning a Result so you can handle malformed input.
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);
}Pretty printing
Use to_string_pretty for human-readable, indented JSON, handy for config files and 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());
}The json! macro
Build JSON inline with the json! macro, which produces a Value without defining a struct.
use serde_json::json;
fn main() {
let v = json!({
"name": "Alice",
"roles": ["admin", "user"]
});
println!("{}", v);
}The Value type
serde_json::Value is an enum representing any JSON node: null, bool, number, string, array, or object. Use it when the shape is unknown.
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"]);
}Safely reading from Value
Index access returns a Value; use accessor methods like as_str or as_i64 that return Option to read typed data safely.
use serde_json::Value;
fn name_of(v: &Value) -> Option<&str> {
v.get("name")?.as_str()
}Modeling JSON access in plain Rust
Reading a value by key, with a fallback when absent, mirrors how you query a Value object. Here it is with a 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);
}Bytes and writers
For performance, to_vec serializes to bytes, and to_writer streams directly into any io::Write such as a file or socket.
use serde::Serialize;
#[derive(Serialize)]
struct Msg { text: String }
fn to_bytes(m: &Msg) -> Vec<u8> {
serde_json::to_vec(m).unwrap()
}Handling parse errors
from_str returns Result. Match on the error to give users a helpful message instead of panicking.
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),
}
}Converting between Value and structs
serde_json::from_value and to_value convert between a typed struct and the dynamic Value when you need both.
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);
}Quick Check
Test your understanding of working with JSON.
Recap
You learned JSON handling with serde_json:
to_string/from_strconvert structs and JSON textto_string_prettyformats readably- The
json!macro andValuehandle dynamic JSON - Use accessors and
Resultto read and parse safely
Next: customizing serialization with field attributes.
Часто задаваемые вопросы
Урок «Работа с JSON» бесплатный?
Да — полный текст урока «Работа с JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.
Чему я научусь в уроке «Работа с JSON»?
serde_json Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn Rust Coding?
Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Работа с JSON»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn Rust Coding?
Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.