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

Вложенный объект в JSON в Rust

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

При разборе объект по ключу заполняет вложенную структуру целиком. Если внутренний объект опущен, поле остается нулевым значением типа.

Запишем человека с адресом:

use serde::{Deserialize, Serialize}; use serde_json; #[derive(Serialize, Deserialize)] struct Address { city: String, } #[derive(Serialize, Deserialize)] struct Person { name: String, addr: Address, } fn main() { let person = Person { name: String::from("ann"), addr: Address { city: String::from("oslo"), }, }; match serde_json::to_string(&person) { Ok(text) => println!("{}", text), Err(_) => println!("error"), } }

На экране объект с ключом "addr" и вложенным "city". Порядок ключей в строке может отличаться, смысл тот же.

Разберем такой же вид строки обратно:

use serde::{Deserialize, Serialize}; use serde_json; #[derive(Serialize, Deserialize)] struct Address { city: String, } #[derive(Serialize, Deserialize)] struct Person { name: String, addr: Address, } fn main() { let text = r#"{"name":"ann","addr":{"city":"oslo"}}"#; match serde_json::from_str::<Person>(text) { Ok(person) => println!("{}", person.addr.city), Err(_) => println!("error"), } }

Даны типы:

struct Size { w: i32, h: i32, } struct Box { label: String, size: Size, }

Подключите трейты, соберите строку для коробки с подписью "a" и размером 2 на 3 и выведите ее.

Дана строка:

let text = r#"{"name":"bob","addr":{"city":"berlin"}}"#;

Используйте типы Person и Address из урока, прочитайте text и выведите город.

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

struct Outer { inner: Inner, } struct Inner { val: i32, }

Скажите, какой ключ появится у вложенного объекта в строке при сборке Outer.

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