Чтение строки в структуру в Rust
Разбор читает строку и заполняет значение выбранного типа. Команда из крейта формата принимает текст и тип структуры; если ключи не совпали с полями или тип не подошел, исход сообщает о сбое.
Лишние ключи в объекте обычно игнорируют, а известные поля заполняют по именам или по меткам переименования. Без трейта разбора тип в строку не прочитать.
Разберем готовую строку в пользователя:
use serde::{Deserialize, Serialize};
use serde_json;
#[derive(Serialize, Deserialize)]
struct User {
name: String,
age: i32,
}
fn main() {
let text = r#"{"name":"ann","age":20}"#;
match serde_json::from_str::<User>(text) {
Ok(user) => println!("{} {}", user.name, user.age),
Err(_) => println!("error"),
}
}
На экране "ann" и число 20.
Команда разбора с типом в угловых скобках
говорит, в какую структуру класть поля.
При неверном числе во второй ветке исхода структура не считается готовой:
use serde::{Deserialize, Serialize};
use serde_json;
#[derive(Serialize, Deserialize)]
struct User {
name: String,
age: i32,
}
fn main() {
let text = r#"{"name":"ann","age":"old"}"#;
match serde_json::from_str::<User>(text) {
Ok(user) => println!("{}", user.age),
Err(_) => println!("error"),
}
}
Дана структура:
struct Item {
title: String,
pages: i32,
}
Разберите строку {"title":"go","pages":100},
выведите название и число страниц через
разбор исхода.
Дана строка:
let text = r#"{"x":10,"y":20}"#;
Объявите структуру с полями x
и y, прочитайте text
и выведите оба числа.
Дана строка:
let text = r#"{"name":"ann"}"#;
Для структуры User из урока скажите,
чем заполнится поле age, если
ключа в объекте нет.