Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpJsCl 201 of 288 menu
◀ ▶

Списки и карты в JSON в Rust

Вектор при сборке становится массивом в квадратных скобках. Элементы идут в том же порядке, что и в векторе, а тип элементов задает вид каждой ячейки в строке.

Карта с ключом типа строка становится объектом: каждая пара ключ и значение превращается в поле объекта. Для других типов ключей нужен свой вид записи.

Запишем список пользователей и счетчики в одной структуре:

use std::collections::HashMap; use serde::{Deserialize, Serialize}; use serde_json; #[derive(Serialize, Deserialize)] struct User { name: String, age: i32, } #[derive(Serialize, Deserialize)] struct Data { users: Vec<User>, meta: HashMap<String, i32>, } fn main() { let data = Data { users: vec![ User { name: String::from("ann"), age: 20, }, User { name: String::from("bob"), age: 22, }, ], meta: HashMap::from([ (String::from("a"), 1), (String::from("b"), 2), ]), }; match serde_json::to_string(&data) { Ok(text) => println!("{}", text), Err(_) => println!("error"), } }

В строке ключ "users" ведет к массиву объектов, а "meta" к объекту с числовыми значениями. Пустой вектор дает [], пустая карта {}.

Разбор заполняет вектор и карту по строке:

use std::collections::HashMap; use serde::{Deserialize, Serialize}; use serde_json; #[derive(Serialize, Deserialize)] struct User { name: String, age: i32, } #[derive(Serialize, Deserialize)] struct Data { users: Vec<User>, meta: HashMap<String, i32>, } fn main() { let text = r#"{"users":[{"name":"x","age":1}],"meta":{"k":5}}"#; match serde_json::from_str::<Data>(text) { Ok(data) => println!("{} {}", data.users.len(), data.meta["k"]), Err(_) => println!("error"), } }

Дана структура:

struct Pack { ids: Vec<i32>, }

Соберите строку для значения с одним элементом 7 в векторе и выведите ее.

Дана строка:

let text = r#"{"meta":{"x":1}}"#;

Разберите text в структуру Data из урока и выведите значение по ключу "x".

Дана структура:

struct Bad { by_int: HashMap<i32, String>, }

Скажите, соберется ли строка для заполненной карты с числовым ключом без своего вида.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить