簡體   English   中英

使用 rust 反序列化具有多個可能值的 JSON

[英]Deserializing JSON with multiple possible values with rust

所以我正在用 Rust 編寫一個程序(我對它很陌生),它讀取一個 json 配置文件並根據輸入做一些事情。 我已經成功地使用serde_json解析了 json。 我想讓用戶做的下一件事是能夠指定一些高級選項,但我不知道如何解析輸入。 默認的 json 看起來像這樣:

{
  value: true
}

將其解析為這樣的結構:

#[derive(Deserialize)]
pub struct Config {
  value: bool
}

我將如何為用戶添加選項以便能夠像這樣輸入boolobject

{
  value: {
    avanced_value: true
  }
}

我曾嘗試使用這樣的enum但似乎無法在枚舉中使用bool

#[derive(Deserialize)]
pub struct Config {
  value: ValueEnum
}

#[derive(Deserialize)]
pub enum ValueEnum {
  bool,
  Config(ValueConfig),
}

#[derive(Deserialize)]
pub struct ValueConfig {
  advanced_value: bool
}

我是否遺漏了一些明顯的東西,還是應該重構輸入 json? 提前Tnx。

您沒有將 bool 包裝在枚舉變體中(就像您使用 ValueConfig 所做的那樣)。 同樣默認情況下,serde 標記枚舉,這可能不是您想要的。 您想使用未標記的枚舉:

#[derive(Deserialize)]
pub struct Config {
  value: ValueEnum
}

#[derive(Deserialize)]
#[serde(untagged)]
pub enum ValueEnum {
  Bool(bool),
  Config(ValueConfig),
}

#[derive(Deserialize)]
pub struct ValueConfig {
  advanced_value: bool
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM