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

Пустое необязательное поле в JSON в Rust

Поле типа необязательного значения может отсутствовать в объекте. При сборке вариант None часто все равно дает ключ со значением null, если ничего не настроить.

Атрибут над полем просит пропустить ключ, когда вариант пуст. Запись #[serde(skip_serializing_if = "Option::is_none")] сравнивает поле с None и не включает его в строку, если значения нет.

Сравним запись с заметкой и без нее:

use serde::{Deserialize, Serialize}; use serde_json; #[derive(Serialize, Deserialize)] struct Item { title: String, #[serde(skip_serializing_if = "Option::is_none")] note: Option<String>, } fn main() { let with_note = Item { title: String::from("go"), note: Some(String::from("ok")), }; let empty_note = Item { title: String::from("go"), note: None, }; match serde_json::to_string(&with_note) { Ok(text) => println!("{}", text), Err(_) => println!("error"), } match serde_json::to_string(&empty_note) { Ok(text) => println!("{}", text), Err(_) => println!("error"), } }

Первая строка содержит "note", во второй ключа "note" нет. Поле title остается в обеих строках.

Тот же флаг работает для числа внутри необязательного поля:

use serde::{Deserialize, Serialize}; use serde_json; #[derive(Serialize, Deserialize)] struct Score { name: String, #[serde(skip_serializing_if = "Option::is_none")] bonus: Option<i32>, } fn main() { let score = Score { name: String::from("ann"), bonus: None, }; match serde_json::to_string(&score) { Ok(text) => println!("{}", text), Err(_) => println!("error"), } }

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

struct Row { code: i32, flag: Option<bool>, }

Добавьте пропуск пустого варианта для flag, соберите строку для кода 1 и None в флаге и скажите, будет ли ключ "flag".

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

struct Bag { tags: Option<Vec<String>>, }

Настройте пропуск для tags, соберите строку для None и скажите, появится ли ключ "tags".

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

struct Pair { left: Option<i32>, right: i32, }

При сборке значения с пустым left и right равным 5 перечислите ключи, которые останутся в строке, если для left включен пропуск.

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